Annotation of ECHO_content/ECHO_collection.py, revision 1.181
1.13 dwinter 1: """New version of the product started February, 8th. Without scientific classification, use content-type for further classification."""
1.1 casties 2: """Echo collection provides the classes for the ECHO content web-site.
3:
4: class ECHO_collection is the basis class for an ECHO collection.
5:
6: class ECHO_resource contains information on ECHO resources (e.g. an Display environment for Metadata
7:
8: class ECHO_externalLink contains information on externalLinks
9:
10:
11: """
12: import string
1.14 dwinter 13: import re
1.29 dwinter 14: import os
1.1 casties 15: import OFS.Image
16: from types import *
1.154 dwinter 17: from OFS.Cache import Cacheable
1.1 casties 18: from OFS.Image import Image
19: from Globals import DTMLFile
20: from OFS.Folder import Folder
21: from OFS.SimpleItem import SimpleItem
22: from AccessControl import ClassSecurityInfo
1.85 dwinter 23: from AccessControl.User import UserFolder
1.1 casties 24: from Globals import InitializeClass
25: from Globals import DTMLFile
1.84 dwinter 26: import Globals
1.1 casties 27: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
28: from Products.PageTemplates.PageTemplate import PageTemplate
1.29 dwinter 29: from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
30: from Globals import Persistent, package_home
1.1 casties 31: from Acquisition import Implicit
1.52 dwinter 32: from ECHO_helpers import displayTypes
1.141 dwinter 33: import urllib
1.177 dwinter 34: import smtplib
1.153 dwinter 35: import time
1.173 dwinter 36: from Ft.Xml.Domlette import NonvalidatingReader
37: from Ft.Xml.Domlette import PrettyPrint
38: from Ft.Xml import EMPTY_NAMESPACE
39:
40: import Ft.Xml.XPath
41: import cStringIO
1.179 dwinter 42: import zLOG
1.84 dwinter 43:
1.50 dwinter 44: try:
45: from psycopg import libpq
46: except:
47: try:
48: from pyPgSQL import libpq
49: except:
50: print "ECHO_collection: Warning - No libpq imported!"
51:
1.14 dwinter 52: import xml.dom.minidom
1.1 casties 53:
54: import urllib
55: import xml.dom.minidom
1.23 dwinter 56: from ECHO_graphicalOverview import javaHandler,javaScriptMain
1.41 dwinter 57: import ECHO_helpers
1.1 casties 58:
1.163 dwinter 59: def donatus(txt2):
60: import xmlrpclib
61:
62: server = xmlrpclib.ServerProxy("http://archimedes.fas.harvard.edu/cgi-bin/donatus-rpc")
63:
64: txt=txt2.encode('utf-8')
65: bin=xmlrpclib.Binary(txt)
66:
67:
68:
69: ret=server.donatus.analyze(bin)
70:
71:
72: return ret['morphData'].data
73:
74:
75: def donatusVariant2Lemma(morphData):
76: """creates hash variant -> morphdata"""
77: ret={}
78: dom=xml.dom.minidom.parseString(morphData)
79: lemmas=dom.getElementsByTagName('lemma')
80: for lemma in lemmas:
81: variants=lemma.getElementsByTagName('variant')
82: for variant in variants:
83: atr=variant.getAttribute('form')
84: if ret.has_key(atr):
85: ret[atr].append=lemma.getAttribute('form')
86: else:
87: ret[atr]=[lemma.getAttribute('form')]
88:
89: return ret
90:
1.162 dwinter 91: #regexp for extracting elements from xml
92: patternTXT=r"<\s*txt.*?>(.*?)</txt>"
93: regexpTXT = re.compile(patternTXT, re.IGNORECASE + re.DOTALL)
94: patternPage=r"<\s*page.*?>(.*?)</page>"
95: regexpPage = re.compile(patternPage, re.IGNORECASE + re.DOTALL)
96:
97:
1.153 dwinter 98: def ECHO_rerenderLinksMD(self,obj=None,types=['title','label']):
99: """Rerender all Links"""
100: ret=""
101:
102: if not obj:
103: obj = self
104:
105: entries=obj.ZopeFind(obj,obj_metatypes=['ECHO_resource'],search_sub=1)
106:
107: for entry in entries:
108: if entry[1].meta_type == 'ECHO_resource':
109: try:
110: entry[1].ECHO_getResourceMD(template="no")
111: if "title" in types:
112: entry[1].generate_title()
113: if "label" in types:
114: entry[1].generate_label()
115: ret+="OK:"+entry[0]+"-- "+entry[1].getTitle().decode('utf-8')+"-- "+entry[1].getTitle().decode('utf-8')+"<br>"
116: except:
117: ret+="Error:"+entry[0]+"<br>"
118:
119:
120:
121:
122: return "<html><body>"+ret+"Rerenderd all links to resources in: "+self.title+"</html></body>"
123:
124: def reloadMetaDataFromStorage(self,RESPONSE=None):
125: """copy metadata from the storage to ECHO"""
126: ret=""
127: resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1)
128:
129: for resource in resources:
130: x=str(resource[1].copyIndex_meta2echo_resource())+"<br>"
131: ret+=x
132: #print x
133:
134:
135: if RESPONSE is not None:
136: #RESPONSE.redirect('./manage_main')
137: return "<html><body>"+ret+"</html></body>"
138:
139: return ret
140:
1.149 dwinter 141: def getRDFDescription(self,linkURL,urn=None,nameDef=None,typeName=None):
1.142 dwinter 142: """rdf"""
1.148 dwinter 143:
1.142 dwinter 144: ret=""
1.148 dwinter 145: about="""<RDF:Description RDF:about="%s">"""
1.142 dwinter 146: name="""<ECHONAVIGATION:name>%s</ECHONAVIGATION:name>"""
1.145 dwinter 147: link="""<ECHONAVIGATION:link xlink:href="%s">%s</ECHONAVIGATION:link>"""
1.148 dwinter 148: clickable="""<ECHONAVIGATION:linkClickable>%s</ECHONAVIGATION:linkClickable>"""
1.144 dwinter 149: #link="""<ECHONAVIGATION:link RDF:about="%s"/>"""
1.142 dwinter 150: type="""<ECHONAVIGATION:type>%s</ECHONAVIGATION:type>"""
1.145 dwinter 151: #xlink="""<ECHONAVIGATION:xlink xlink:href="%s"/>"""
1.142 dwinter 152: if not urn:
1.148 dwinter 153: #urn="urn:"+re.sub('/',':',self.absolute_url())
154: urn=self.absolute_url()
1.142 dwinter 155: about2=about%urn
1.146 dwinter 156: if not nameDef:
157: if hasattr(self,'label') and not (self.label==""):
158: name2=name%self.label
159: elif not self.title=="":
160: name2=name%self.title
161: else:
162: name2=name%self.getId()
163:
164: name2=re.sub('&','&',name2)
1.142 dwinter 165: else:
1.146 dwinter 166: name2=name%nameDef
1.145 dwinter 167:
168: linkURL=re.sub('http:','',linkURL)
169: linkURL2=re.sub('&','&',linkURL)
170: link2=link%(("http:"+linkURL2),("http:"+urllib.quote(linkURL)))
1.148 dwinter 171: clickable2=clickable%"true"
1.149 dwinter 172:
173: if not typeName:
174: type2=type%self.meta_type
175: else:
176: type2=type%typeName
1.142 dwinter 177:
1.148 dwinter 178: #ret=about2+"\n"+name2+"\n"+link2+"\n"+type2+"\n"+clickable2+"\n</RDF:Description>"
179: ret=about2+"\n"+name2+"\n"+type2+"\n"+clickable2+"\n</RDF:Description>"
1.142 dwinter 180: return ret
181:
182: def getCopyrightsFromForm(self,argv):
1.98 dwinter 183: medias={}
184: partners={}
185: copyrights={}
186:
187: copyrightsFinal=[]
188: for arg in argv.keys():
1.104 dwinter 189:
1.98 dwinter 190: if arg[0:5]=='media':
191: nm=int(arg[5:])
192: medias[nm]=argv[arg]
193: elif arg[0:5]=='partn':
194: nm=int(arg[5:])
195: partners[nm]=argv[arg]
196: elif arg[0:5]=='copyr':
197: nm=int(arg[5:])
198: copyrights[nm]=argv[arg]
199:
1.104 dwinter 200:
201:
1.98 dwinter 202: copyrightsList=[(medias[nm],partners[nm],copyrights[nm]) for nm in medias.keys()]
203: for copyright in copyrightsList:
1.104 dwinter 204:
205: if copyright[2]=='institution0000':
206: copyrightsFinal.append((copyright[0],copyright[1],self.getPartnerCopyright(copyright[1],'')))
207: else:
208: if not copyright[0]=='':
209: copyrightsFinal.append(copyright)
210:
211:
1.98 dwinter 212: return copyrightsFinal
213:
1.6 dwinter 214: #List of different types for the graphical linking viewer
215: viewClassificationListMaster=['view point','area']
216:
1.98 dwinter 217:
1.73 dwinter 218: def checkDiffs(self,metadict):
219: """check differences"""
220:
1.90 dwinter 221:
222:
223:
1.73 dwinter 224: def NoneToEmpty(obj):
225: if obj:
226: return obj
227: else:
228: return ""
1.90 dwinter 229:
230:
1.73 dwinter 231:
232: diffs={}
1.90 dwinter 233:
1.73 dwinter 234: tags=self.findTagsFromMapping(self.contentType)
1.90 dwinter 235: self.referencetypes=tags[2]
236: self.fields=tags[3]
237:
238:
1.73 dwinter 239: for field in tags[1]:
240: try:
241: if (NoneToEmpty(self.getFieldValue(self.getFieldTag(tags,field)))==metadict[self.getFieldTag(tags,field)]):
242: diffs[self.getFieldTag(tags,field)]=1
243: else:
1.91 dwinter 244:
1.73 dwinter 245: diffs[self.getFieldTag(tags,field)]=0
246: except:
247: diffs[self.getFieldTag(tags,field)]=0
1.91 dwinter 248:
1.73 dwinter 249: return diffs
250:
1.29 dwinter 251: def content_html(self,type):
252: """template fuer content"""
253: #templates = self.ZopeFind(self.aq_parent,obj_ids=[type+"_template"])
254: #
255: #if templates:
256: # return templates[0][1]()
1.97 dwinter 257:
258: if hasattr(self,type+"_template"):
1.29 dwinter 259: obj=getattr(self,type+"_template")
260: return obj()
1.96 dwinter 261: else:
1.29 dwinter 262: pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_%s_template_standard.zpt'%type).__of__(self)
263: pt.content_type="text/html"
264: return pt()
265:
1.1 casties 266: def toList(field):
267: """Einzelfeld in Liste umwandeln"""
268: if type(field)==StringType:
269: return [field]
270: else:
271: return field
272:
273: def getText(nodelist):
274:
275: rc = ""
276: for node in nodelist:
277: if node.nodeType == node.TEXT_NODE:
278: rc = rc + node.data
279: return rc
280:
1.165 dwinter 281: def getTextFromNode(nodename):
282: nodelist=nodename.childNodes
283: rc = ""
284: for node in nodelist:
285: if node.nodeType == node.TEXT_NODE:
286: rc = rc + node.data
287: return rc
1.1 casties 288:
1.65 casties 289: def sendFile(self, filename, type):
290: """sends an object or a local file (in the product) as response"""
291: paths = filename.split('/')
292: object = self
293: # look for an object called filename
294: for path in paths:
295: if hasattr(object, path):
296: object = getattr(object, path)
297: else:
298: object = None
299: break
300: if object:
301: # if the object exists then send it
1.76 casties 302: return object.index_html(self.REQUEST.REQUEST, self.REQUEST.RESPONSE)
1.65 casties 303: else:
304: # send a local file with the given content-type
305: fn = os.path.join(package_home(globals()), filename)
306: self.REQUEST.RESPONSE.setHeader("Content-Type", type)
307: self.REQUEST.RESPONSE.write(file(fn).read())
308: return
309:
1.87 casties 310: class BrowserCheck:
311: """check the browsers request to find out the browser type"""
312:
313: def __init__(self, zope):
314: self.ua = zope.REQUEST.get_header("HTTP_USER_AGENT")
315: self.isN4 = (string.find(self.ua, 'Mozilla/4.') > -1) and (string.find(self.ua, 'MSIE') < 0)
316: self.isIE = string.find(self.ua, 'MSIE') > -1
317: self.nav = self.ua[string.find(self.ua, '('):]
318: ie = string.split(self.nav, "; ")[1]
319: if string.find(ie, "MSIE") > -1:
320: self.versIE = string.split(ie, " ")[1]
321: self.isMac = string.find(self.ua, 'Macintosh') > -1
322: self.isWin = string.find(self.ua, 'Windows') > -1
323: self.isIEWin = self.isIE and self.isWin
324: self.isIEMac = self.isIE and self.isMac
325:
1.65 casties 326:
1.132 dwinter 327:
328:
1.154 dwinter 329: def writeMetadata(url,metadict,project=None,startpage=None,xslt=None,thumbtemplate=None,topbar=None,digiLibTemplate=None,xmlfrag=None,digiliburlprefix=None):
1.87 casties 330: """Einlesen der Metadaten und und erstellen des geaenderten XML file"""
1.163 dwinter 331:
1.123 dwinter 332: def updateTextToolNode(tag,value):
1.130 dwinter 333: #print dom,tag,value
1.123 dwinter 334: metanode=dom.getElementsByTagName('texttool')[0]
335: try:
336: nodeOld=metanode.getElementsByTagName(tag)
337: except:
338: nodeOld=None
339:
340: if nodeOld:
341: metanode.removeChild(nodeOld[0]).unlink()
342:
343: node=dom.createElement(tag)
344: nodetext=dom.createTextNode(value)
345: node.appendChild(nodetext)
346: metanode.appendChild(node)
1.73 dwinter 347:
1.149 dwinter 348: if xmlfrag:
349: geturl="""<?xml version="1.0" ?>
350: <resource type="MPIWG">
351: <meta>
352: <bib type="Book">
353: </bib>
354: </meta>
355: </resource>"""
356: dom=xml.dom.minidom.parseString(geturl)
357: else:
358: try:
359: geturl=""
1.163 dwinter 360: for line in ECHO_helpers.urlopen(url).readlines():
1.149 dwinter 361: geturl=geturl+line
362:
363:
364: except:
365: return (None,"Cannot open: "+url)
366:
367: try:
368: dom=xml.dom.minidom.parseString(geturl)
369: except:
370: return (None,"Cannot parse: "+url+"<br>"+geturl)
1.73 dwinter 371:
1.149 dwinter 372:
1.73 dwinter 373:
374: metanodes=dom.getElementsByTagName('bib')
375:
376: if not metanodes:
377: metanodes=dom.getElementsByTagName('archimedes')
378:
379: metanode=metanodes[0]
380:
381: for metaData in metadict.keys():
1.90 dwinter 382:
1.73 dwinter 383: try:
384: nodeOld=metanode.getElementsByTagName(metaData)
385: except:
386: nodeOld=None
387:
388: if nodeOld:
389: metanode.removeChild(nodeOld[0]).unlink()
390: else:
391: # try also old writing rule - instead of _:
392: try:
393: nodeOld=metanode.getElementsByTagName(re.sub('_','-',metaData))
394: except:
395: nodeOld=None
396:
397: if nodeOld:
398: metanode.removeChild(nodeOld[0]).unlink()
399:
400: metanodeneu=dom.createElement(metaData)
1.172 dwinter 401: metanodetext=dom.createTextNode(metadict[metaData])
402: #try:
403: #metanodetext=dom.createTextNode(unicode(metadict[metaData],"utf-8"))
404: #except:
405: #metanodetext=dom.createTextNode(metadict[metaData].encode('utf-8'))
1.73 dwinter 406: metanodeneu.appendChild(metanodetext)
407: metanode.appendChild(metanodeneu)
408:
1.123 dwinter 409:
410:
411:
412:
413: if project:
414: updateTextToolNode('project',project)
415:
416: if startpage:
417: updateTextToolNode('startpage',startpage)
418:
419: if topbar:
420: updateTextToolNode('toptemplate',topbar)
421:
422: if thumbtemplate:
423: updateTextToolNode('thumbtemplate',thumbtemplate)
424:
425: if xslt:
426: updateTextToolNode('xslt',xslt)
427:
428:
1.154 dwinter 429: if digiliburlprefix:
430: updateTextToolNode('digiliburlprefix',digiliburlprefix)
1.73 dwinter 431:
1.172 dwinter 432: try:
433: return dom.toxml().encode('utf-8')
434: except:
435: return dom.toxml('utf-8')
1.73 dwinter 436:
1.90 dwinter 437:
438:
1.1 casties 439: def readMetadata(url):
1.73 dwinter 440: """Methode zum Auslesen der Metadateninformation zu einer Resource
1.1 casties 441: Vorerst noch Typ bib"""
442:
443: metadict={}
444: try:
445: geturl=""
1.163 dwinter 446: for line in ECHO_helpers.urlopen(url).readlines():
1.1 casties 447: geturl=geturl+line
448:
449:
450: except:
451: return (None,"Cannot open: "+url)
452:
453: try:
454: dom=xml.dom.minidom.parseString(geturl)
455: except:
456: return (None,"Cannot parse: "+url+"<br>"+geturl)
457:
458: metanode=dom.getElementsByTagName('bib')
459: metadict['bib_type']='Book'
460: if len(metanode)==0:
461: metanode=dom.getElementsByTagName('archimedes')
462: metadict['bib_type']='Archimedes'
1.91 dwinter 463:
1.1 casties 464:
465: if not len(metanode)==0:
466: metacontent=metanode[0].childNodes
467:
468: try:
469: metadict['bib_type']=getText(dom.getElementsByTagName('bib')[0].attributes['type'].childNodes)
470: except:
471: """nothing"""
472:
473: for node in metacontent:
474: try:
1.95 dwinter 475: #print urllib.unquote(getText(node.childNodes)),getText(node.childNodes)
1.91 dwinter 476: metadict[re.sub('-','_',node.tagName.lower())]=urllib.unquote(getText(node.childNodes))
1.1 casties 477: except:
478: """nothing"""
479:
1.73 dwinter 480:
1.1 casties 481: return metadict,""
482:
483:
1.27 dwinter 484: def setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordstrs,viewClassification=""):
1.1 casties 485:
486: """Allegemeine Informationen zu einer ECHO Collection"""
487:
1.6 dwinter 488: self.viewClassification=viewClassification
489:
1.1 casties 490: self.label = label
491: self.title=title
492: self.description=description
1.27 dwinter 493: self.contentType=contentType
1.1 casties 494: self.responsible=responsible
495: self.credits=toList(credits)
496: self.weight=weight
497:
1.5 dwinter 498: coords=[]
1.1 casties 499: #coordinates of for rectangles
1.10 dwinter 500:
1.91 dwinter 501:
1.9 dwinter 502: if coordstrs:
503: for coordstr in coordstrs:
1.91 dwinter 504:
1.9 dwinter 505: try:
506: temco=coordstr.split(",")
507: except:
508: temco=[]
1.91 dwinter 509:
1.9 dwinter 510: coords.append(temco)
511:
1.10 dwinter 512:
1.5 dwinter 513: self.coords=coords[0:]
1.1 casties 514:
1.98 dwinter 515: class ECHO_copyright(Folder):
516: """Copyright informationen"""
517: meta_type="ECHO_copyright"
518:
519:
520:
521: def __init__(self,id,title,copyrights):
522: """init"""
523: self.title=title
524: self.id=id
525: self.copyrights=copyrights[0:]
526:
527: def getCopyrights(self):
528: """return coyprights"""
529: return self.copyrights
530:
531: manage_options = Folder.manage_options+(
532: {'label':'Main Config','action':'ECHO_copyright_configForm'},
533: )
534:
1.167 dwinter 535:
1.98 dwinter 536: def ECHO_copyright_configForm(self):
537: """change form"""
538: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_copyright').__of__(self)
539: pt.content_type="text/html"
540: return pt()
541:
1.111 dwinter 542: def ECHO_copyright_config(self,title,RESPONSE=None):
1.98 dwinter 543: """change"""
544: self.title=title
545: self.copyrights=[]
1.104 dwinter 546: self.copyrights=getCopyrightsFromForm(self,self.REQUEST.form)[0:]
1.1 casties 547:
1.98 dwinter 548: if RESPONSE is not None:
549: RESPONSE.redirect('manage_main')
550:
551:
552: def manage_addECHO_copyrightForm(self):
553: """Form for adding"""
554: pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_copyright.zpt').__of__(self)
555: return pt()
1.1 casties 556:
1.98 dwinter 557: def manage_addECHO_copyright(self, id,title,RESPONSE=None):
558: """add the copyright"""
1.1 casties 559:
1.98 dwinter 560: meta_type="ECHO_copyright"
561:
562: #first generate copyrights as list of tripels (mediaType,partner,copyrightType)
563:
564:
1.1 casties 565:
1.104 dwinter 566: self._setObject(id, ECHO_copyright(id, title,getCopyrightsFromForm(self,self.REQUEST.form)))
1.1 casties 567:
1.98 dwinter 568: if RESPONSE is not None:
569: RESPONSE.redirect('manage_main')
570:
1.29 dwinter 571: class ECHO_layoutTemplate(ZopePageTemplate):
572: """Create a layout Template for different purposes"""
573:
574: meta_type="ECHO_layoutTemplate"
575:
576: def __init__(self, id, text=None, content_type=None,EchoType=None):
577: self.id = str(id)
578:
579:
580:
581: self.ZBindings_edit(self._default_bindings)
582: if text is None:
583: self._default_content_fn = os.path.join(package_home(globals()),
584: 'zpt/ECHO_%s_template_standard.zpt'%EchoType)
585: text = open(self._default_content_fn).read()
586: self.pt_edit(text, content_type)
587:
1.32 dwinter 588:
1.29 dwinter 589: """change form"""
590:
591:
592: def manage_addECHO_layoutTemplateForm(self):
593: """Form for adding"""
1.178 dwinter 594: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt/AddECHO_layoutTemplate.zpt')).__of__(self)
1.29 dwinter 595: return pt()
596:
597: from urllib import quote
598:
599:
600: def manage_addECHO_layoutTemplate(self, EchoType,title=None,REQUEST=None):
601: "Add a Page Template with optional file content."
602: if type(EchoType)==StringType:
603: EchoTypes=[EchoType]
604: else:
605: EchoTypes=EchoType
606:
607: for singleType in EchoTypes:
1.32 dwinter 608:
1.29 dwinter 609: id = str(singleType)+"_template"
610: if REQUEST is None:
611: self._setObject(id, ECHO_layoutTemplate(id, text,EchoType=singleType))
612: ob = getattr(self, id)
613:
614: if title:
615: ob.pt_setTitle(title)
616: return ob
617: else:
618: file = REQUEST.form.get('file')
619: headers = getattr(file, 'headers', None)
620: if headers is None or not file.filename:
621: zpt = ECHO_layoutTemplate(id,EchoType=singleType)
622: else:
623: zpt = ECHO_layoutTemplate(id, file, headers.get('content_type'))
624:
625: self._setObject(id, zpt)
626: ob = getattr(self, id)
627: if title:
628: ob.pt_setTitle(title)
629:
630: try:
631: u = self.DestinationURL()
632: except AttributeError:
633: u = REQUEST['URL1']
634:
635:
636: REQUEST.RESPONSE.redirect(u+'/manage_main')
637: return ''
1.1 casties 638:
1.163 dwinter 639: class ECHO_fullText(ZopePageTemplate):
640: """echo fulltext in xml"""
641:
642: meta_type="ECHO_fullText"
643:
644: def donatusVariant2Lemma(self,nr='1'):
645: """analyze by donatus"""
646: return donatusVariant2Lemma(donatus(self.lemmatize(nr)))
647:
648: def tagLex(self,nr="1"):
649: """generate Links"""
650: global retLex
651: global toggle
652:
653: toggle=0
654: retLex=""
655:
656: lemmatized=self.lemmatize(nr)[0:]
657: #print "ho",repr(lemmatized)
658: variants=donatusVariant2Lemma(donatus(lemmatized))
659:
660: def createTag(name,attrs):
661: global toggle
662:
663: if name=="w":
664: toggle=1
665: return ""
666: else:
667: tag="<"
668: tag+=name
669: for attr in attrs.keys():
670: tag+=""" %s="%s" """%(attr,attrs[attr])
671: tag+=">"
672: return tag
673:
674: def createData(data):
675: global toggle
676: astring="""<a href="http://141.14.236.86/cgi-bin/toc/dict?step=remotetable;word=%s;lang=de" target="_blank">%s</a> """
677: if toggle: # tag war ein w
678: toggle=0
679: if variants.has_key(data):
680: return astring%(variants[data][0],data)
681: else:
682: return astring%(data,data)
683:
684:
1.142 dwinter 685:
1.163 dwinter 686: # 3 handler functions
687: def start_element(name, attrs):
688: global retLex
1.165 dwinter 689:
1.163 dwinter 690: retLex+=createTag(name,attrs)
691: def end_element(name):
692: global retLex
693: if not name=="w":
694: retLex+="</%s>"%(name.encode('utf-8'))
695:
696:
697: def char_data(data):
698: global retLex
699: if data:
700: try:
701: retLex+=createData(data)
702: except:
703: """no"""
704:
705: p = xml.parsers.expat.ParserCreate()
706:
707: p.StartElementHandler = start_element
708: p.EndElementHandler = end_element
709: p.CharacterDataHandler = char_data
710:
711: p.Parse(lemmatized.encode('utf-8'),1)
1.165 dwinter 712: #print repr(lemmatized.encode('utf-8'))
1.163 dwinter 713:
714: return retLex
715:
716:
717: def lemmatize(self,nr='1',lang="de"):
718: """lemmatize"""
719: global ret
720: ret=""
721:
722: def createTag(name,attrs):
723: tag="<"
724: tag+=name
725: for attr in attrs.keys():
726: tag+=""" %s="%s" """%(attr,attrs[attr])
727: tag+=">"
728: return tag
729:
730: def insertW(str):
731: splitted=str.split()
732: wordlist=["<w>%s</w>"%split for split in splitted]
733: return string.join(wordlist,'\n')
734:
735: # 3 handler functions
736: def start_element(name, attrs):
737: global ret
738: ret+=createTag(name,attrs)
739: def end_element(name):
740: global ret
741: ret+="</%s>"%(name.encode('utf-8'))
742:
743: def char_data(data):
744: global ret
745: ret+=insertW(data)
746:
747: p = xml.parsers.expat.ParserCreate()
748:
749: p.StartElementHandler = start_element
750: p.EndElementHandler = end_element
751: p.CharacterDataHandler = char_data
752:
753: p.Parse(self.getPage(nr), 1)
754: txt="""<wtag locator="xxx">
755: <section lang="%s"><s>%s</s></section>
756: </wtag>"""
757: ret=txt%(lang,ret)
758:
759: return ret
760:
761: def getPage(self,nr='1'):
762: """get page n"""
763: dom=xml.dom.minidom.parseString(self())
764: pages=dom.getElementsByTagName('page')
765:
766: return pages[int(nr)-1].toxml('utf-8')
767:
768: # Product registration and Add support
769: manage_addECHO_fullTextForm = PageTemplateFile(
770: 'zpt/AddECHO_fullText.zpt', globals())
771:
772: from urllib import quote
773:
774: def manage_addECHO_fullText(self, id, title=None, text=None,
775: REQUEST=None, submit=None):
776: "Add a Page Template with optional file content."
777:
778: id = str(id)
779: if REQUEST is None:
780: self._setObject(id, ECHO_fullText(id, text))
781: ob = getattr(self, id)
782: if title:
783: ob.pt_setTitle(title)
784: return ob
785: else:
786: file = REQUEST.form.get('file')
787: headers = getattr(file, 'headers', None)
788: if headers is None or not file.filename:
789: zpt = ECHO_fullText(id)
790: else:
791: zpt = ECHO_fullText(id, file, headers.get('content_type'))
792:
793: self._setObject(id, zpt)
794:
795: try:
796: u = self.DestinationURL()
797: except AttributeError:
798: u = REQUEST['URL1']
799:
800: if submit == " Add and Edit ":
801: u = "%s/%s" % (u, quote(id))
802: REQUEST.RESPONSE.redirect(u+'/manage_main')
803: return ''
1.142 dwinter 804:
1.90 dwinter 805: class ECHO_resource(Folder,Persistent):
1.1 casties 806: """ECHO Ressource"""
1.123 dwinter 807: security=ClassSecurityInfo()
1.1 casties 808: meta_type='ECHO_resource'
809:
1.6 dwinter 810: viewClassificationList=viewClassificationListMaster
1.1 casties 811:
1.41 dwinter 812: getSubCols = ECHO_helpers.getSubCols
1.98 dwinter 813:
1.139 dwinter 814: security.declareProtected('View','index_html')
1.146 dwinter 815:
816: def showRDF(self):
817: """showrdf"""
818: self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
819: ret="""<?xml version="1.0" encoding="utf-8"?>\n<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:ECHONAVIGATION="http://www.echo.eu/rdf#">\n"""
1.165 dwinter 820: ret+=self.getRDF(urn="echo:colllectionroot")+"\n"
1.146 dwinter 821:
822: ret+="""</RDF:RDF>"""
823: return ret
824:
1.143 dwinter 825: def getRDF(self,urn=None):
1.139 dwinter 826: """rdf"""
1.146 dwinter 827: ret=getRDFDescription(self,self.link,urn=urn)
1.148 dwinter 828: return ret+self.createSubElementRDF(urn=urn)
1.146 dwinter 829:
830:
1.148 dwinter 831: def createSubElementRDF(self,urn=None):
1.146 dwinter 832: """rdf list"""
1.148 dwinter 833: if not urn:
834: urn=self.absolute_url()
1.146 dwinter 835: ret=""
836:
1.148 dwinter 837: rettemp="""<RDF:Seq RDF:about="%s">\n"""%urn
1.146 dwinter 838: flag=0
1.139 dwinter 839:
1.148 dwinter 840: li="""<RDF:li RDF:resource="%s" />\n"""
1.146 dwinter 841: if not ('<error>' in self.getFullTextXML(noredirect='Yes')):
1.148 dwinter 842: nurn=self.absolute_url()+'/getFullTextXML'
1.146 dwinter 843: rettemp+=li%nurn
844: flag=1
1.147 dwinter 845: if not ('<error>' in self.getImageView(noredirect='Yes')):
1.148 dwinter 846: nurn=self.absolute_url()+'/getImageView'
1.147 dwinter 847: rettemp+=li%nurn
848: flag=1
849:
1.149 dwinter 850:
851: if not ('<error>' in self.showMetaDataXML()):
852: nurn=self.absolute_url()+'/showMetaDataXML'
853: rettemp+=li%nurn
854: flag=1
855:
1.146 dwinter 856: rettemp+="</RDF:Seq>"
857:
858: if flag==1:
859: ret+=rettemp
860:
861: if not ('<error>' in self.getFullTextXML(noredirect='Yes')):
1.148 dwinter 862: nurn=self.absolute_url()+'/getFullTextXML'
1.149 dwinter 863: ret+=getRDFDescription(self,self.absolute_url()+'/getFullTextXML',urn=nurn,nameDef="Fulltext",typeName="ECHO_fulltext")
1.147 dwinter 864:
865: if not ('<error>' in self.getImageView(noredirect='Yes')):
1.148 dwinter 866: nurn=self.absolute_url()+'/getImageView'
1.149 dwinter 867: ret+=getRDFDescription(self,self.absolute_url()+'/getImageView',urn=nurn,nameDef="Image View",typeName="ECHO_imageview")
868:
869: if not ('<error>' in self.showMetaDataXML()):
870: nurn=self.absolute_url()+'/showMetaDataXML'
871: ret+=getRDFDescription(self,self.absolute_url()+'/showMetaDataXML',urn=nurn,nameDef="Metadata",typeName="ECHO_metaData")
1.146 dwinter 872:
873: return ret
1.139 dwinter 874:
1.132 dwinter 875: def getAccessRightSelectorHTML(self,outlook="select"):
876: """htmlselector"""
877: values=['free','mpiwg']
878:
879: if outlook=="select":
880: ret="""<select name="%s">"""%self.getId()
881:
882: for value in values:
883: if value==self.getAccessRightMD():
884: ret+="<option selected>%s</option>"%value
885: else:
886: ret+="<option>%s</option>"%value
887: return ret+"</select>"
888:
889: else:
890: ret=""
891: for value in values:
1.148 dwinter 892:
1.132 dwinter 893: if value==self.getAccessRightMD():
894: ret+="""<input type="radio" name="%s" value="%s" checked>%s"""%(self.getId(),value,value)
895: else:
896: ret+="""<input type="radio" name="%s" value="%s">%s"""%(self.getId(),value,value)
897: return ret
898:
899:
900:
901: def getAccessRightMD(self):
902: """set accessright"""
903: url=self.metalink
904:
905: try:
906: geturl=""
1.163 dwinter 907: for line in ECHO_helpers.urlopen(url).readlines():
1.132 dwinter 908: geturl=geturl+line
909:
910:
911: except:
912: return (None,"Cannot open: "+url)
913:
914: try:
915: dom=xml.dom.minidom.parseString(geturl)
916: root=dom.getElementsByTagName('resource')[0]
917: except:
918: return (None,"Cannot parse: "+url+"<br>"+geturl)
919:
920: internal=dom.getElementsByTagName('internal')
921: if internal:
922: institution=dom.getElementsByTagName('institution')
923: return getText(institution[0].childNodes)
924:
925: free=dom.getElementsByTagName('free')
926: if free:
927: return "free"
928:
929: return "free" #default free
930:
931: def changeAccessRightMD(self,accessright,RESPONSE=None):
932: """change the rights"""
933:
934: params="accessright=%s"%accessright
935:
936:
1.163 dwinter 937: #print ECHO_helpers.urlopen(self.absolute_url()+'/setAccessRightXML'+'?'+params).read()
1.132 dwinter 938:
939:
1.163 dwinter 940: ECHO_helpers.urlopen('http://xserve02.mpiwg-berlin.mpg.de:18880/echo_nav/storage/downloadExternalXML?index_meta_url=%s&xml_url=%s'%(self.metalink,self.absolute_url()+'/setAccessRightXML'+urllib.quote('?'+params))).read()
1.132 dwinter 941:
942:
943: if RESPONSE is not None:
944: RESPONSE.redirect('manage_main')
945:
946:
947: def setAccessRightXML(self,accessright):
948: """set accessright"""
949: url=self.metalink
950:
951: try:
952: geturl=""
1.163 dwinter 953: for line in ECHO_helpers.urlopen(url).readlines():
1.132 dwinter 954: geturl=geturl+line
955:
956:
957: except:
958: return (None,"Cannot open: "+url)
959:
960: try:
961: dom=xml.dom.minidom.parseString(geturl)
962: root=dom.getElementsByTagName('resource')[0]
963: except:
964: return (None,"Cannot parse: "+url+"<br>"+geturl)
965:
966: metanodes=dom.getElementsByTagName('access-conditions')
967:
968: if not metanodes:
969: nodenew=dom.createElement('access-conditions')
970: root.appendChild(nodenew)
971: metanode=nodenew
972: else:
973: metanode=metanodes[0]
974:
975: accesses=metanode.getElementsByTagName('access')
976:
977: if not accesses:
978: nodenew2=dom.createElement('access')
979: metanode.appendChild(nodenew2)
980: metanode2=nodenew2
981: else:
982: metanode2=accesses[0]
983:
984: internal=metanode.getElementsByTagName('internal')
985:
986: if internal:
987: metanode2.removeChild(internal[0]).unlink()
988:
989: free=metanode.getElementsByTagName('free')
990:
991: if free:
992: metanode2.removeChild(internal[0]).unlink()
993:
994:
995: if accessright=='free':
996: nodenew3=dom.createElement('free')
997: metanode2.appendChild(nodenew3)
998: elif accessright=='mpiwg':
999: nodenew3=dom.createElement('internal')
1000: nodenew4=dom.createElement('institution')
1001: metanodetext=dom.createTextNode('mpiwg')
1002: nodenew4.appendChild(metanodetext)
1003: nodenew3.appendChild(nodenew4)
1004: metanode2.appendChild(nodenew3)
1005:
1006: return dom.toxml().encode('utf-8')
1007:
1.125 dwinter 1008: def setStartPageForm(self):
1009: """Form for changing the startpage"""
1010:
1011:
1012: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resourceStartPage.zpt').__of__(self)
1013: pt.content_type="text/html"
1014: return pt()
1015:
1016:
1.124 dwinter 1017: def setStartPage(self,startpage=None,RESPONSE=None):
1018: """set start page, if no startpage defined use the generic one of the resource"""
1019:
1.125 dwinter 1020: if (not (type(startpage)==StringType)) and ("__generic" in startpage): # checke ob generic in der liste
1.124 dwinter 1021: startpage=self.absolute_url()+"/startpage_html"
1.125 dwinter 1022:
1023: if (not startpage) or (startpage=="__generic"):
1024: startpage=self.absolute_url()+"/startpage_html"
1.124 dwinter 1025:
1026:
1027: params="startpage=%s"%startpage
1.125 dwinter 1028:
1.163 dwinter 1029: ECHO_helpers.urlopen('http://xserve02.mpiwg-berlin.mpg.de:18880/echo_nav/storage/downloadExternalXML?index_meta_url=%s&xml_url=%s'%(self.metalink,self.absolute_url()+'/newMetaXML'+urllib.quote('?'+params))).read()
1.126 dwinter 1030:
1.124 dwinter 1031:
1032: path=self.metalink
1033:
1.128 dwinter 1034: path=re.sub(self.REQUEST['SERVER_URL'],'',path)
1035: path=re.sub('http://'+self.REQUEST['HTTP_HOST'],'',path)
1036:
1.124 dwinter 1037: path=re.sub('http://foxridge.mpiwg-berlin.mpg.de:8080','',path) # falls foxridge als server
1038: path=re.sub('http://foxridge.mpiwg-berlin.mpg.de','',path) # falls foxridge als server
1.138 dwinter 1039: path=re.sub('http://foxridge.rz-berlin.mpg.de:8080','',path) # falls foxridge als server
1.156 dwinter 1040: path=re.sub('http://content.mpiwg-berlin.mpg.de','',path) # falls content als server
1.138 dwinter 1041: path=re.sub('http://foxridge.rz-berlin.mpg.de','',path) # falls foxridge als server
1.164 dwinter 1042: path=re.sub('http://vision.rz-berlin.mpg.de','',path) # falls vision als server
1.172 dwinter 1043: path=re.sub('http://echo.mpiwg-berlin.mpg.de','',path) # falls echo
1.124 dwinter 1044: path=re.sub('/index.meta','',path)
1045:
1046:
1.163 dwinter 1047: ECHO_helpers.urlopen("http://nausikaa2.rz-berlin.mpg.de:86/cgi-bin/toc/admin/reg.cgi?path=%s"%path).readlines()
1.124 dwinter 1048:
1049: if RESPONSE is not None:
1050: RESPONSE.redirect('manage_main')
1051:
1.123 dwinter 1052: def changeViewerTemplateSetForm(self):
1053: """change the viewer template set"""
1054: pt=PageTemplateFile('Products/ECHO_content/zpt/changeResourceViewerTemplateSet').__of__(self)
1055: return pt()
1056:
1057:
1058: def getTextToolsField(self,name,default=''):
1059: """Lese Textoolsfelder aus index.meta im path aus"""
1060:
1061: try:
1062: dom=xml.dom.minidom.parse(self.metalink)
1063: node=dom.getElementsByTagName('texttool')[0] #getNode
1064: subnode=node.getElementsByTagName(name)[0]
1065:
1066: # bei text wird nur der Folder gebraucht
1067: if name=="text":
1068: splitted=getText(subnode.childNodes).split("/")
1069: return splitted[len(splitted)-2]
1070: else:
1071: return getText(subnode.childNodes)
1072: except:
1073: return default
1074:
1075:
1.154 dwinter 1076: def changeViewerTemplateSet(self,project,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix,RESPONSE=None):
1.123 dwinter 1077: """changeit"""
1078:
1.154 dwinter 1079: paramList=['project','startpage','xslt','thumbtemplate','topbar','digiLibTemplate','digiliburlprefix']
1.123 dwinter 1080:
1081:
1.132 dwinter 1082: #writeMetadata(self.metalink,self.metaDataHash,project,None,xslt,thumbtemplate,topbar,digiLibTemplate)
1.123 dwinter 1083:
1.154 dwinter 1084: params="project=%s&xslt=%s&thumbtemplate=%s&topbar=%s&digiLibTemplate=%s&digiliburlprefix=%s"%(project,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix)
1.124 dwinter 1085:
1.123 dwinter 1086:
1.163 dwinter 1087: ECHO_helpers.urlopen('http://echo.mpiwg-berlin.mpg.de/echo_nav/storage/downloadExternalXML?index_meta_url=%s&xml_url=%s'%(self.metalink,self.absolute_url()+'/newMetaXML'+urllib.quote('?'+params))).read()
1.123 dwinter 1088:
1.154 dwinter 1089: #print self.absolute_url()+'/newMetaXML'+urllib.quote'?'+params)
1.123 dwinter 1090: # hack Pfad auf die Dokumente
1091: path=self.metalink
1092:
1.127 dwinter 1093:
1.123 dwinter 1094:
1095: path=re.sub('/index.meta','',path)
1096:
1.127 dwinter 1097: path=re.sub(self.REQUEST['SERVER_URL'],'',path)
1098: path=re.sub('http://'+self.REQUEST['HTTP_HOST'],'',path)
1099:
1100: path=re.sub('http://foxridge.mpiwg-berlin.mpg.de:8080','',path) # falls foxridge als server
1101: path=re.sub('http://foxridge.mpiwg-berlin.mpg.de:8080','',path) # falls foxridge als server
1102: path=re.sub('http://foxridge.mpiwg-berlin.mpg.de','',path) # falls foxridge als server
1103:
1.138 dwinter 1104: path=re.sub('http://foxridge.rz-berlin.mpg.de:8080','',path) # falls foxridge als server
1105: path=re.sub('http://foxridge.rz-berlin.mpg.de','',path) # falls foxridge als server
1.156 dwinter 1106: path=re.sub('http://content.mpiwg-berlin.mpg.de','',path) # falls content als server
1.172 dwinter 1107: path=re.sub('http://echo.mpiwg-berlin.mpg.de','',path) # falls echo
1.164 dwinter 1108:
1109: path=re.sub('http://vision.rz-berlin.mpg.de','',path) # falls vision als server
1110:
1.163 dwinter 1111: return ECHO_helpers.urlopen("http://nausikaa2.rz-berlin.mpg.de:86/cgi-bin/toc/admin/reg.cgi?path=%s"%path).readlines()
1.164 dwinter 1112:
1.123 dwinter 1113:
1114: if RESPONSE is not None:
1115: RESPONSE.redirect('manage_main')
1116:
1.98 dwinter 1117:
1.48 dwinter 1118: def getTitle(self):
1119: """title"""
1.135 dwinter 1120: try:
1121: return self.title.encode('utf-8','ignore')
1122: except:
1123: self.title=self.title.decode('iso-8859-1','ignore')[0:] #correnct conding error
1124: return self.title.encode('utf-8','ignore')
1125:
1.48 dwinter 1126: def getLabel(self):
1127: """title"""
1.135 dwinter 1128: try:
1129: return self.label.encode('utf-8','ignore')
1130: except:
1131: self.label=self.label.decode('iso-8859-1','ignore')[0:] #correnct conding error
1132: return self.label.encode('utf-8','ignore')
1.134 dwinter 1133:
1.29 dwinter 1134: def content_html(self):
1135: """template fuer content"""
1136: return content_html(self,'resource')
1137:
1.6 dwinter 1138: def getViewClassification(self):
1139: if hasattr(self,'viewClassification'):
1140: return self.viewClassification
1141: else:
1142: return ""
1.83 dwinter 1143:
1144: def getFullTextXML(self,noredirect=None):
1.90 dwinter 1145: """getFullTextXML; gives the FullText as an XML Document, and <error></error> if somthing goes wrong."""
1.180 dwinter 1146:
1.83 dwinter 1147: try:
1.179 dwinter 1148: zLOG.LOG("ECHO Fulltext",zLOG.INFO,"open %s"%self.metalink)
1.163 dwinter 1149: fh=ECHO_helpers.urlopen(self.metalink)
1.179 dwinter 1150: zLOG.LOG("ECHO Fulltext",zLOG.INFO,"opened %s"%self.metalink)
1.83 dwinter 1151: dom=xml.dom.minidom.parse(fh)
1152: texttools=dom.getElementsByTagName('texttool')
1153: text=texttools[0].getElementsByTagName('text')
1154: texturl=getText(text[0].childNodes)
1.180 dwinter 1155:
1.179 dwinter 1156: zLOG.LOG("ECHO Fulltext",zLOG.INFO,"found %s"%texturl)
1157: fh.close()
1.180 dwinter 1158: zLOG.LOG("ECHO Fulltext",zLOG.INFO,"closed fh")
1.181 ! dwinter 1159: #keine url
! 1160: if not (texturl.split(":")[0] in ['http','ftp','file']):
! 1161: if not noredirect:
! 1162: return file(texturl).read()
! 1163: else:
! 1164: return texturl
1.180 dwinter 1165:
1.83 dwinter 1166: if not noredirect:
1.137 dwinter 1167: self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
1.180 dwinter 1168: zLOG.LOG("ECHO Fulltext",zLOG.INFO,"redirect to:%s"%texturl)
1.83 dwinter 1169: self.REQUEST.RESPONSE.redirect(texturl)
1170: else:
1171: return texturl
1172: except:
1.90 dwinter 1173:
1174: if not noredirect:
1175: self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
1176: self.REQUEST.RESPONSE.write("<error>no fulltext available</error>")
1177: else:
1178: return "<error>no fulltext available</error>"
1.92 dwinter 1179:
1.147 dwinter 1180:
1181: def getImageView(self,noredirect=None):
1182: """getImages; give Imageviewr and <error></error> if somthing goes wrong."""
1183: try:
1.163 dwinter 1184: fh=ECHO_helpers.urlopen(self.metalink)
1.147 dwinter 1185: dom=xml.dom.minidom.parse(fh)
1186: texttools=dom.getElementsByTagName('texttool')
1187: text=texttools[0].getElementsByTagName('image')
1188: imagetemp=getText(text[0].childNodes)
1189:
1190: text=dom.getElementsByTagName('archive-path')
1191: archivepath=getText(text[0].childNodes)
1192: archivepath=re.sub('/mpiwg/online/','',archivepath)
1193: imageurl="http://echo.mpiwg-berlin.mpg.de/zogilib?fn="+archivepath+"/"+imagetemp
1.180 dwinter 1194: fh.close()
1195:
1.147 dwinter 1196: if not noredirect:
1197: self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
1198: self.REQUEST.RESPONSE.redirect(imageurl)
1199: else:
1200: return imageurl
1201: except:
1202:
1203: if not noredirect:
1204: self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
1205: self.REQUEST.RESPONSE.write("<error>no fulltext available</error>")
1206: else:
1207: return "<error>no images available</error>"
1208:
1209:
1.104 dwinter 1210: def getCopyrightsHTML(self):
1.129 jdamerow 1211: """gib (link auf copyright link, mediatyp, institution, copyrightType, label von copyrightType) aus"""
1.104 dwinter 1212:
1.126 dwinter 1213: if hasattr(self,'copyrightModel'):
1214: obj=self.copyrightModel
1.104 dwinter 1215:
1.94 dwinter 1216: else:
1.104 dwinter 1217: return "ERROR"
1218: ret=[]
1.94 dwinter 1219:
1.151 jdamerow 1220: for copyright in obj.getCopyrights(): #copyright - media / partner / copyrightID
1.104 dwinter 1221:
1222:
1223: try:
1.151 jdamerow 1224: if hasattr(self.copyrightTypes,copyright[2]):
1225: copyrightTypeObj=getattr(self.copyrightTypes,copyright[2])
1226: link="copyrightTypes/"+copyright[2]+'/copyright.html'
1227: else:
1228: copyrightTypeObj=getattr(obj,copyright[2])
1229: link="copyrightModel/"+copyright[2]+'/copyright.html'
1230:
1.119 jdamerow 1231: label=copyrightTypeObj.label
1.151 jdamerow 1232: url=getattr(copyrightTypeObj, 'url', '')
1.119 jdamerow 1233:
1234: if url!='':
1.129 jdamerow 1235: ret.append((url,copyright[0],copyright[1],copyright[2],label))
1.119 jdamerow 1236: else:
1237: if hasattr(copyrightTypeObj, 'copyright.html'):
1.129 jdamerow 1238: ret.append(("""%s?partner=%s"""%(link,copyright[1]),copyright[0],copyright[1],copyright[2],label))
1.119 jdamerow 1239: else:
1.129 jdamerow 1240: ret.append(('empty',copyright[0],copyright[1],copyright[2],label))
1.104 dwinter 1241: except:
1242: """nothing"""
1243:
1244: return ret
1.157 jdamerow 1245:
1246: def getInstitutionsHTML(self):
1.160 dwinter 1247: """gibt Liste der fÂrdernden Institutionen aus"""
1.157 jdamerow 1248:
1249: if hasattr(self,'support'):
1250: obj=self.support
1251: ret=obj.getSupporter()
1252: return ret
1253: else:
1254: return ''
1255:
1.83 dwinter 1256:
1.9 dwinter 1257: def getCredits(self):
1258: """Ausgabe der credits"""
1259: if self.credits:
1260: return self.credits
1261: else:
1262: return []
1.6 dwinter 1263:
1.94 dwinter 1264: def __init__(self,id,link,metalink,resourceID,title,label,description,contentType,renderingType,copyrightType,responsible,credits,weight,coords):
1.1 casties 1265:
1266: self.id = id
1267: """Festlegen der ID"""
1268:
1269: self.label = label
1270: self.link= link
1271: self.metalink=metalink
1272: self.title=title
1273: self.weight=weight
1274: self.credits=toList(credits)
1275: self.description=description
1.27 dwinter 1276: self.contentType=contentType
1.94 dwinter 1277: self.copyrightType=copyrightType
1.90 dwinter 1278: self.renderingType=renderingType
1.1 casties 1279: self.responsible=responsible
1.90 dwinter 1280: self.resourceID=resourceID
1281:
1.9 dwinter 1282: if coords:
1283: coordsnew=[ string.split(x,",") for x in coords]
1284: else:
1285: coordsnew=[]
1286:
1.1 casties 1287: self.coords=coordsnew
1288:
1.3 dwinter 1289:
1290: def getCoords(self):
1.160 dwinter 1291: """gibt coordinaten als String zurßck und lÜscht zugleich einträge die keine Koordinaten sind, letzteres zur korrektur der Eingabe der alten version"""
1.73 dwinter 1292: retList=[]
1293: if hasattr(self,'coords'):
1294: for x in self.coords:
1295: if len(x)>1:
1296: retList.append(string.join(x,","))
1297: return retList
1298:
1299:
1.3 dwinter 1300:
1.49 dwinter 1301: def getContentType(self):
1302: try:
1303: return self.contentType
1304: except:
1305: return ""
1.1 casties 1306:
1.73 dwinter 1307: def getCopyrightType(self):
1308: try:
1309: return self.copyrightType
1310: except:
1311: return ""
1312:
1313: def getRenderingType(self):
1314: try:
1315: return self.renderingType
1316: except:
1317: return ""
1318:
1.1 casties 1319: def ECHO_resource_config(self):
1320: """Main configuration"""
1321:
1322: if not hasattr(self,'weight'):
1323: self.weight=""
1324:
1.13 dwinter 1325: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resource.zpt').__of__(self)
1.1 casties 1326: return pt()
1327:
1328:
1.73 dwinter 1329: def ECHO_resource_config_main(self):
1330: """Main configuration"""
1331:
1332: if not hasattr(self,'weight'):
1333: self.weight=""
1334:
1335: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resource_main.zpt').__of__(self)
1336: return pt()
1337:
1338: def ECHO_resource_config_coords(self):
1339: """Coords configuration """
1340:
1341: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resource_coords.zpt').__of__(self)
1342: return pt()
1343:
1344: def ECHO_resource_config_credits(self):
1345: """Main configuration"""
1346:
1347: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resource_credits.zpt').__of__(self)
1348: return pt()
1349:
1350: def ECHO_resource_config_metadata(self):
1351: """Main configuration"""
1352:
1353: if (hasattr(self,'metadata')) and not (hasattr(self,'metaDataHash')):
1354: self.metaDataHash={}
1355: self.contentType=self.bib_type
1356: for data in self.metadata:
1357: data_neu=re.sub('-','_',data)
1.133 dwinter 1358: self.meta
1359: DataHash[data_neu]=getattr(self,data)[0:]
1.91 dwinter 1360:
1.73 dwinter 1361:
1362: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resource_metadata.zpt').__of__(self)
1363: return pt()
1364:
1365:
1366:
1367:
1368: def changeECHO_resource_main(self,metalink,link,title,label,description,contentType,renderingType,weight,resourceID,RESPONSE=None):
1.160 dwinter 1369: """Ănderung der Properties"""
1.73 dwinter 1370: self.resourceID=resourceID
1371: self.title=title
1372: self.label=label
1373: self.description=description
1374:
1375: self.contentType=contentType
1376: self.renderingType=renderingType
1377: self.weight=weight
1378:
1379: self.link=link
1380: self.metalink=metalink
1381:
1382: if RESPONSE is not None:
1383: RESPONSE.redirect('manage_main')
1384:
1385:
1386: def changeECHO_resource_coords(self,coords,viewClassification,RESPONSE=None):
1.160 dwinter 1387: """Ănderung der Properties - coords"""
1.73 dwinter 1388:
1.78 dwinter 1389: if type(coords)==StringType:
1390: coords=[coords]
1391:
1.79 casties 1392: try:
1.73 dwinter 1393: coordsnew=[ string.split(x,",") for x in coords]
1394: except:
1395: coordsnew=[]
1396:
1397: self.coords=coordsnew[0:]
1398: self.viewClassification=viewClassification
1399:
1400: if RESPONSE is not None:
1401: RESPONSE.redirect('manage_main')
1402:
1403: def changeECHO_resource_credits(self,credits,responsible,copyrightType,RESPONSE=None):
1.160 dwinter 1404: """Ănderung der Properties"""
1.73 dwinter 1405: self.credits=credits
1406: self.responsible=responsible
1407: self.copyrightType=copyrightType
1408:
1409: if RESPONSE is not None:
1410: RESPONSE.redirect('manage_main')
1411:
1412:
1.90 dwinter 1413: def changeECHO_resource_metadata_local(self,RESPONSE=None):
1414: """change metadata"""
1415: tags=self.findTagsFromMapping(self.contentType)
1416: for field in tags[1]:
1.123 dwinter 1417: self.metaDataHash[self.getFieldTag(tags,field)]=self.REQUEST.form[self.getFieldTag(tags,field)][0:]
1.90 dwinter 1418:
1419:
1420:
1421: if RESPONSE is not None:
1422: RESPONSE.redirect('manage_main')
1423:
1.73 dwinter 1424: def changeECHO_resource_metadata(self,RESPONSE=None):
1425: """change metadata"""
1426: tags=self.findTagsFromMapping(self.contentType)
1.75 dwinter 1427: self.OSAS_meta={}
1.73 dwinter 1428: for field in tags[1]:
1429: try:
1430: self.metaDataHash[self.getFieldTag(tags,field)]=self.REQUEST.form[self.getFieldTag(tags,field)]
1431: self.OSAS_meta[self.getFieldTag(tags,field)]=self.REQUEST.form['OSAS_%s'%self.getFieldTag(tags,field)]
1432: except:
1433: """nothing"""
1434:
1.163 dwinter 1435: ECHO_helpers.urlopen('http://xserve02.mpiwg-berlin.mpg.de:18880/echo_nav/storage/downloadExternalXML?index_meta_url=%s&xml_url=%s'%(self.metalink,self.absolute_url()+'/newMetaXML')).read()
1.123 dwinter 1436:
1437:
1.73 dwinter 1438: if RESPONSE is not None:
1439: RESPONSE.redirect('manage_main')
1440:
1441:
1.90 dwinter 1442: def getMDValue(self,fieldName):
1443: return self.metaDataHash.get(fieldName,'!!NOT USED HERE in Type: %s'%self.contentType)
1444:
1.154 dwinter 1445: def newMetaXML(self,project=None,startpage=None,xslt=None,thumbtemplate=None,topbar=None,digiLibTemplate=None,digiliburlprefix=None):
1.75 dwinter 1446: """new index.meta"""
1.73 dwinter 1447: self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
1448:
1.123 dwinter 1449: if not hasattr(self,'metaDataHash'):
1.130 dwinter 1450:
1.123 dwinter 1451: self.copyIndex_meta2echo_resource()
1452: try:
1.154 dwinter 1453: return writeMetadata(self.metalink,self.OSAS_meta,project,startpage,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix=digiliburlprefix)
1.123 dwinter 1454: except:
1.154 dwinter 1455: return writeMetadata(self.metalink,self.metaDataHash,project,startpage,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix=digiliburlprefix)
1.90 dwinter 1456:
1.149 dwinter 1457: def showMetaDataXML(self,project=None,startpage=None,xslt=None,thumbtemplate=None,topbar=None,digiLibTemplate=None):
1458: """schreibe md"""
1.150 dwinter 1459:
1.149 dwinter 1460: try:
1461:
1462: return writeMetadata(self.metalink,self.metaDataHash,project,startpage,xslt,thumbtemplate,topbar,digiLibTemplate,xmlfrag="yes")
1463: except:
1464: return "<error> no metadata stored</error>"
1465:
1.123 dwinter 1466: def getMetaDataXML(self,project=None,startpage=None,xslt=None,thumbtemplate=None,topbar=None,digiLibTemplate=None):
1.90 dwinter 1467: """prints out metadata as stored in the echo environment, format is the index.meta format"""
1468: self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
1469: return writeMetadata(self.metalink,self.metaDataHash)
1470:
1.27 dwinter 1471: def changeECHO_resource(self,metalink,link,title,label,description,contentType,responsible,weight,viewClassification="",coords=None,credits=None,RESPONSE=None):
1.160 dwinter 1472: """Ănderung der Properties"""
1.1 casties 1473:
1.33 dwinter 1474: try:
1475: coordsnew=[ string.split(x,",") for x in coords]
1476: except:
1477: coordsnew=[]
1.21 dwinter 1478:
1.27 dwinter 1479: setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordsnew)
1.62 dwinter 1480: self.viewClassification=viewClassification
1.21 dwinter 1481: self.coords=coordsnew[0:]
1.1 casties 1482: self.link=link
1483: self.metalink=metalink
1484:
1485: if RESPONSE is not None:
1486: RESPONSE.redirect('manage_main')
1487:
1488:
1489: manage_options = Folder.manage_options+(
1.73 dwinter 1490: {'label':'Main Config','action':'ECHO_resource_config_main'},
1491: {'label':'Change Metadata','action':'ECHO_resource_config_metadata'},
1492: {'label':'Change Coords','action':'ECHO_resource_config_coords'},
1493: {'label':'Add coords','action':'ECHO_graphicEntry'},
1494: {'label':'Sync Metadata','action':'ECHO_getResourceMD'},
1.155 dwinter 1495: {'label':'Change TemplateSets and Image Viewer','action':'changeViewerTemplateSetForm'},
1.125 dwinter 1496: {'label':'set/change startpage','action':'setStartPageForm'},
1.130 dwinter 1497: {'label':'Copy MD for indexing and search','action':'copySearchFields'},
1.73 dwinter 1498: )
1.1 casties 1499:
1.20 dwinter 1500: def getOverview(self):
1501: """overview graphics"""
1502:
1503: return self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['overview'])[0][1]
1504:
1.3 dwinter 1505: def ECHO_graphicEntry(self):
1506: """DO nothing"""
1.20 dwinter 1507: overview = self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['overview'])
1.19 dwinter 1508: if overview:
1.13 dwinter 1509: pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_draw.zpt').__of__(self)
1.3 dwinter 1510: return pt()
1511: else:
1512: return "NO OVERVIEW GRAPHICS"
1513:
1.4 dwinter 1514: def ECHO_enterCoords(self,coordstr,angle="",RESPONSE=None):
1.3 dwinter 1515: """Enter coords"""
1516: coords=self.coords
1.4 dwinter 1517: temco=coordstr.split(",")
1518: temco.append(angle)
1519: coords.append(temco)
1520:
1.3 dwinter 1521: self.coords=coords[0:]
1.13 dwinter 1522:
1.3 dwinter 1523: if RESPONSE is not None:
1524: RESPONSE.redirect('ECHO_graphicEntry')
1525:
1.73 dwinter 1526:
1527: def isDefinedInThisSet(self,fields,field):
1528: """checks if field is defined in fields"""
1529: if (fields[0].has_key(field)) and not (fields[0][field]==""):
1530: return 1
1531: else:
1532:
1533: return 0
1534:
1535: def getFieldLabel(self,fields,field):
1536: """get labels"""
1537: try:
1538: ret =fields[0][field]
1539: if ret == "":
1540: return field
1541: else:
1542: return ret
1543: except:
1544: return field
1545:
1546:
1547:
1548: def getFieldTag(self,fields,field):
1549: """get labels"""
1550: try:
1551: ret =fields[0][field]
1552: if ret == "":
1553: return field
1554: else:
1555: return ret
1556: except:
1557: return field
1558:
1559:
1560:
1561: def getFieldValue(self,field):
1562: """get value"""
1.91 dwinter 1563:
1.73 dwinter 1564: try:
1565:
1566: ret=self.metaDataHash[field]
1567: if ret == "":
1568: return None
1569: else:
1570: return ret
1571: except:
1572: return None
1573:
1.90 dwinter 1574: def getMetaDataHash(self):
1575: """md hash"""
1576: return self.metaDataHash
1577:
1578: def setFieldValue(self,field,value):
1579: """get value"""
1.91 dwinter 1580:
1.90 dwinter 1581: if not hasattr(self,'metaDataHash'):
1582: setattr(self,'metaDataHash',{})
1583: self.metaDataHash[field]=value[0:]
1584:
1585:
1.130 dwinter 1586: def copySearchFields(self):
1587: """copys metadatafields to the object"""
1588: fields=['author','title','year']
1589: for field in fields:
1590: setattr(self,'MD_'+field,self.getFieldValue(field))
1591:
1.90 dwinter 1592:
1.73 dwinter 1593: def findLabelsFromMapping(self,referenceType):
1594: """gib hash mit label -> generic zurueck"""
1.90 dwinter 1595: #return {},[]
1596:
1597: temp=self.ZopeFind(self.standardMD)
1598:
1599: if referenceType=="":
1600: referenceType="book"
1601:
1.73 dwinter 1602:
1603: bibdata={}
1604: retdata={}
1.90 dwinter 1605: fields=[]
1.73 dwinter 1606: fieldlist=self.standardMD.fieldList
1607:
1608: for referenceTypeF in self.referencetypes:
1.91 dwinter 1609:
1.86 dwinter 1610: if referenceTypeF[1].title.lower() == referenceType.lower():
1.91 dwinter 1611:
1.86 dwinter 1612: try:
1613: bibdata[referenceTypeF[1].title]=referenceTypeF[1].fields
1614: referenceType=referenceTypeF[1].title
1615: except:
1616: bibdata[referenceType]=referenceTypeF[1].fields
1617:
1618:
1.73 dwinter 1619: bibdata['data']=referenceTypeF[1]
1.90 dwinter 1620: fields=bibdata[referenceType]
1.73 dwinter 1621: for field in fieldlist:
1622: retdata[field]=referenceTypeF[1].getValue(field)[1]
1.91 dwinter 1623:
1.90 dwinter 1624: return retdata,fieldlist,temp,fields
1.73 dwinter 1625:
1626: def findTagsFromMapping(self,referenceType):
1627: """gib hash mit label -> generic zurueck"""
1.90 dwinter 1628:
1629:
1630: if referenceType=="":
1631: referenceType="book"
1632:
1633: temp = self.ZopeFind(self.standardMD)[0:]
1634:
1635:
1636: #self.referencetypes=temp[0:]
1637:
1.73 dwinter 1638:
1639:
1.90 dwinter 1640:
1641:
1642:
1.73 dwinter 1643: bibdata={}
1644: retdata={}
1645: fieldlist=self.standardMD.fieldList
1.130 dwinter 1646: fields=[]
1.90 dwinter 1647: for referenceTypeF in temp:
1.130 dwinter 1648: #print referenceType
1.73 dwinter 1649:
1.86 dwinter 1650: if referenceTypeF[1].title.lower() == referenceType.lower():
1651: try:
1652: bibdata[referenceTypeF[1].title]=referenceTypeF[1].fields
1653: referenceType=referenceTypeF[1].title
1654: except:
1655: bibdata[referenceType]=referenceTypeF[1].fields
1.73 dwinter 1656: bibdata['data']=referenceTypeF[1]
1.90 dwinter 1657: fields=bibdata[referenceType]
1.73 dwinter 1658: for field in fieldlist:
1659: retdata[field]=referenceTypeF[1].getValue(field)[0]
1660:
1.90 dwinter 1661: return retdata,fieldlist,temp,fields
1.73 dwinter 1662:
1663:
1.123 dwinter 1664: security.declarePublic('copyIndex_meta2echo_resource') # has to be change, presentlyset because of OSAS koordination
1.90 dwinter 1665: def copyIndex_meta2echo_resource(self,RESPONSE=None):
1666: """copy MD von Index_meta to the echo_resource"""
1.95 dwinter 1667:
1.90 dwinter 1668: (metadict, error)=readMetadata(self.metalink)
1.123 dwinter 1669:
1.130 dwinter 1670:
1.90 dwinter 1671:
1672: self.metaDataHash={}
1673: if not error=="": #Fehler beim Auslesen des Metafiles
1.130 dwinter 1674:
1.153 dwinter 1675: return "ERROR:",error,self.absolute_url()
1.130 dwinter 1676:
1677: self.contentType=metadict['bib_type'][0:]
1.90 dwinter 1678: fields=self.findTagsFromMapping(self.contentType)
1.95 dwinter 1679:
1.90 dwinter 1680: #fields=self.findLabelsFromMapping(self.contentType)
1681: for field in fields[1]:
1.95 dwinter 1682:
1.90 dwinter 1683: if self.isDefinedInThisSet(fields,field):
1.95 dwinter 1684: #print urllib.unquote(metadict.get(self.getFieldTag(fields,field),''))
1.90 dwinter 1685: self.setFieldValue(self.getFieldTag(fields,field),metadict.get(self.getFieldTag(fields,field),''))
1686:
1687:
1688:
1689: if RESPONSE:
1690: return RESPONSE.redirect('manage_main')
1691:
1.133 dwinter 1692: def ECHO_getResourceMD(self,template="yes",back=None):
1.1 casties 1693: """Einlesen der Metadaten und Anlegen dieser Metadaten als Informationen zur Resource"""
1694: (metadict, error)=readMetadata(self.metalink)
1695:
1.133 dwinter 1696: if back:
1697: self.REQUEST.SESSION['back']=back
1.1 casties 1698:
1699: if not error=="": #Fehler beim Auslesen des Metafiles
1.73 dwinter 1700: return "ERROR:",error
1701:
1702:
1.86 dwinter 1703: if not (metadict['bib_type'].lower()==self.contentType.lower()):
1.73 dwinter 1704: self.REQUEST.SESSION['contentStorage']=metadict['bib_type']
1705: self.REQUEST.SESSION['contentZope']=self.contentType
1.1 casties 1706:
1.73 dwinter 1707: return PageTemplateFile('Products/ECHO_content/zpt/ECHO_getResourceMDErrorContentType.zpt').__of__(self)()
1.1 casties 1708:
1.90 dwinter 1709: self.REQUEST.SESSION['metadict']=metadict
1710:
1711:
1712:
1713: self.REQUEST.SESSION['diffs']=checkDiffs(self,self.REQUEST.SESSION['metadict'])
1714:
1.13 dwinter 1715:
1.73 dwinter 1716:
1.1 casties 1717: if template=="yes":
1.90 dwinter 1718: pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_resourceMD.zpt').__of__(self)
1719: return pt()
1.73 dwinter 1720:
1.90 dwinter 1721:
1.73 dwinter 1722:
1723:
1.1 casties 1724:
1725: def ECHO_getMD(self,item):
1726: """Ausgabe der MD"""
1727: return getattr(self,item)
1728:
1729: def index_html(self):
1730: """standard page"""
1731:
1732: return self.REQUEST.RESPONSE.redirect(self.link)
1733:
1.90 dwinter 1734: def startpage_html(self):
1735: """prints out a startpage for a resource for use e.g. in the BVE"""
1736:
1737: # suche ob startpage.html in dem Ordner vorhanden ist, dann wir diese angezeigt
1738:
1739: sp=self.ZopeFind(self,obj_ids=['startpage.html'])
1740:
1741: if sp:
1742: return sp[1]()
1743:
1.160 dwinter 1744: #prĂźfen ob irgendwo ein template
1.90 dwinter 1745: if hasattr(self,'startpage_index_template'):
1746: return self.startpage_index_template()
1747:
1748: #generisches template ausgeben
1749:
1750: pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_startpage_index_template_standard.zpt').__of__(self)
1751: pt.content_type="text/html"
1752: return pt()
1753:
1754: def toc_html(self):
1755:
1756: sp=self.ZopeFind(self,obj_ids=['toc.html'])
1757:
1758: if sp:
1759: return sp[0][1]()
1760:
1761:
1.123 dwinter 1762: security.declarePublic('generate_label') # has to be change, presentlyset because of OSAS koordination
1.133 dwinter 1763:
1.1 casties 1764: def generate_label(self):
1765: """Erzeugt_standard_Label aus Template"""
1.123 dwinter 1766: pt=getattr(self,"label_template_"+self.contentType.lower())
1.13 dwinter 1767:
1.123 dwinter 1768: self.label=pt()[0:]
1.1 casties 1769: return pt()
1770:
1.123 dwinter 1771: security.declarePublic('generate_title') # has to be change, presentlyset because of OSAS koordination
1.133 dwinter 1772:
1.90 dwinter 1773: def generate_title(self,RESPONSE=None):
1774: """Erzeugt_standard_Label aus Template"""
1.123 dwinter 1775: pt=getattr(self,"label_template_"+self.contentType.lower())
1.90 dwinter 1776:
1.123 dwinter 1777: self.title=pt()[0:]
1.90 dwinter 1778:
1779: return pt()
1780:
1.123 dwinter 1781: Globals.InitializeClass(ECHO_resource)
1782:
1.13 dwinter 1783: def manage_addECHO_resourceForm(self):
1784: """Form for adding a ressource"""
1785: pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_resourceForm.zpt').__of__(self)
1.1 casties 1786: return pt()
1787:
1788:
1.10 dwinter 1789:
1.94 dwinter 1790: def manage_addECHO_resource(self,id,title,label,description,responsible,link,metalink,weight,copyrightType=None,resourceID=None,contentType=None,renderingType=None,credits=None,coords=None,RESPONSE=None):
1.13 dwinter 1791: """addaresource"""
1.1 casties 1792:
1.94 dwinter 1793: newObj=ECHO_resource(id,link,metalink,resourceID,title,label,description,contentType,renderingType,copyrightType,responsible,credits,weight,coords)
1.1 casties 1794:
1795: self._setObject(id,newObj)
1.13 dwinter 1796:
1.1 casties 1797: if RESPONSE is not None:
1798: RESPONSE.redirect('manage_main')
1799:
1800:
1801: class ECHO_externalLink(Folder):
1802: """Link zu einer externen Ressource"""
1803: security=ClassSecurityInfo()
1804: meta_type='ECHO_externalLink'
1805:
1.48 dwinter 1806: def getTitle(self):
1807: """title"""
1.135 dwinter 1808: try:
1809: return self.title.encode('utf-8','ignore')
1810: except:
1811: self.title=self.title.decode('iso-8859-1','ignore')[0:] #correnct conding error
1812: return self.title.encode('utf-8','ignore')
1813:
1.48 dwinter 1814: def getLabel(self):
1815: """title"""
1.135 dwinter 1816: try:
1817: return self.label.encode('utf-8','ignore')
1818: except:
1819: self.label=self.label.decode('iso-8859-1','ignore')[0:] #correnct conding error
1820: return self.label.encode('utf-8','ignore')
1.48 dwinter 1821:
1.29 dwinter 1822: def content_html(self):
1823: """template fuer content"""
1824: return content_html(self,'externalLink')
1825:
1.27 dwinter 1826: def __init__(self,id,link,title,label,description,contentType,responsible,credits,weight,coords):
1.1 casties 1827:
1828: self.id = id
1829: """Festlegen der ID"""
1830:
1831: self.credits=toList(credits)
1832: self.label = label
1833: self.link= link
1834: self.title=title
1835: self.weight=weight
1836: self.description=description
1.27 dwinter 1837: self.contentType=contentType
1.1 casties 1838: self.responsible=responsible
1839: coordsnew=[ string.split(x,",") for x in coords]
1840: self.coords=coordsnew
1841:
1842: def ECHO_externalLink_config(self):
1843: """Main configuration"""
1844:
1845: if not hasattr(self,'weight'):
1846: self.weight=""
1847: if not hasattr(self,'coords'):
1.9 dwinter 1848:
1.1 casties 1849: self.coords=['']
1.91 dwinter 1850:
1.1 casties 1851:
1.13 dwinter 1852: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_externalLink.zpt').__of__(self)
1.1 casties 1853: return pt()
1854:
1855:
1.37 dwinter 1856: def changeECHO_externalLink(self,link,title,label,description,contentType,responsible,weight,coords=None,credits=None,RESPONSE=None):
1.1 casties 1857:
1.160 dwinter 1858: """Ănderung der Properties"""
1.36 dwinter 1859: try:
1860: coordsnew=[ string.split(x,",") for x in coords]
1861: except:
1862: coordsnew=[]
1.1 casties 1863:
1.27 dwinter 1864: setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coords)
1.1 casties 1865:
1.21 dwinter 1866: self.coords=coordsnew[0:]
1.1 casties 1867: self.link=link
1868: if RESPONSE is not None:
1869: RESPONSE.redirect('manage_main')
1870:
1871:
1872: manage_options = Folder.manage_options+(
1873: {'label':'Main Config','action':'ECHO_externalLink_config'},
1874: )
1.17 dwinter 1875:
1876:
1.1 casties 1877: def index_html(self):
1878: """standard page"""
1879:
1880: return self.REQUEST.RESPONSE.redirect(self.link)
1881:
1.13 dwinter 1882: def manage_addECHO_externalLinkForm(self):
1883: """Form for external Links"""
1884: pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_externalLinkForm.zpt').__of__(self)
1.1 casties 1885: return pt()
1886:
1887:
1.27 dwinter 1888: def manage_addECHO_externalLink(self,id,title,label,description,contentType,responsible,link,weight,coords=None,credits=None,RESPONSE=None):
1.13 dwinter 1889: """Add an external Link"""
1.1 casties 1890:
1.27 dwinter 1891: newObj=ECHO_externalLink(id,link,title,label,description,contentType,responsible,credits,weight,coords)
1.1 casties 1892:
1893: self._setObject(id,newObj)
1.13 dwinter 1894:
1.1 casties 1895: if RESPONSE is not None:
1896: RESPONSE.redirect('manage_main')
1897:
1.24 dwinter 1898:
1.51 dwinter 1899: class ECHO_link(ECHO_externalLink):
1900: """external_link"""
1901:
1902: meta_type="ECHO_link"
1903:
1904:
1.53 dwinter 1905: def content_html(self):
1.80 dwinter 1906: """template fuer link"""
1907: if hasattr(self,"link_template"):
1908: return content_html(self,'link')
1909: else:
1910: return content_html(self,'collection')
1.53 dwinter 1911:
1.51 dwinter 1912: def manage_addECHO_linkForm(self):
1913: """Form for external Links"""
1914: pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_linkForm.zpt').__of__(self)
1915: return pt()
1916:
1917:
1918: def manage_addECHO_link(self,id,title,label,description,contentType,responsible,link,weight,coords=None,credits=None,RESPONSE=None):
1919: """Add an external Link"""
1920:
1921: newObj=ECHO_link(id,link,title,label,description,contentType,responsible,credits,weight,coords)
1922:
1923: self._setObject(id,newObj)
1924:
1925: if RESPONSE is not None:
1926: RESPONSE.redirect('manage_main')
1927:
1.24 dwinter 1928:
1.154 dwinter 1929: class ECHO_collection(Folder, Persistent, Implicit, Cacheable):
1.1 casties 1930: """ECHO Collection"""
1.84 dwinter 1931:
1.1 casties 1932: security=ClassSecurityInfo()
1933: meta_type='ECHO_collection'
1.69 dwinter 1934: viewClassificationList=viewClassificationListMaster
1935: displayTypes=displayTypes
1936:
1.130 dwinter 1937: path="/mpiwg/online/permanent/shipbuilding"
1.132 dwinter 1938:
1.142 dwinter 1939: def getRDF(self,urn=None):
1.139 dwinter 1940: """rdf of the collection"""
1.148 dwinter 1941:
1.139 dwinter 1942: contents=self.ZopeFind(self,obj_metatypes=['ECHO_group','ECHO_resource','ECHO_collection'])
1943:
1.143 dwinter 1944: ret=getRDFDescription(self,self.absolute_url(),urn=urn)
1.148 dwinter 1945:
1.142 dwinter 1946: if not urn:
1.148 dwinter 1947: urn=self.absolute_url()
1948:
1949: li="""<RDF:li RDF:resource="%s" />\n"""
1.139 dwinter 1950:
1951:
1952: for content in contents:
1953: ret+=content[1].getRDF()+"\n"
1954:
1.148 dwinter 1955: ret+="""<RDF:Seq RDF:about="%s">\n"""%urn
1.139 dwinter 1956: for content in contents:
1.148 dwinter 1957: nurn=content[1].absolute_url()
1.139 dwinter 1958: ret+=li%nurn
1.141 dwinter 1959: return ret+"</RDF:Seq>"
1.139 dwinter 1960:
1.148 dwinter 1961:
1962: def showRDF(self):
1963: """showrdf"""
1964: self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
1965: ret="""<?xml version="1.0" encoding="utf-8"?>\n<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:ECHONAVIGATION="http://www.echo.eu/rdf#">\n"""
1966: ret+=self.getRDF(urn="echo:collectionroot")+"\n"
1967:
1968: ret+="""</RDF:RDF>"""
1.139 dwinter 1969:
1.148 dwinter 1970: return ret
1971:
1.161 dwinter 1972:
1973:
1.133 dwinter 1974: def changeLabels(self):
1975: """change form"""
1976: pt=PageTemplateFile('Products/ECHO_content/zpt/changeLabelsForm').__of__(self)
1977: pt.content_type="text/html"
1978: return pt()
1979:
1980: def changeTitles(self):
1981: """change form"""
1982: pt=PageTemplateFile('Products/ECHO_content/zpt/changeTitleForm').__of__(self)
1983: pt.content_type="text/html"
1984: return pt()
1.163 dwinter 1985:
1986: def changeWeights(self):
1987: """change form"""
1988: pt=PageTemplateFile('Products/ECHO_content/zpt/changeWeightForm').__of__(self)
1989: pt.content_type="text/html"
1990: return pt()
1991:
1.161 dwinter 1992: def changeMetaDataLinks(self):
1993: """change form"""
1994: pt=PageTemplateFile('Products/ECHO_content/zpt/changeMetaDataLinkForm').__of__(self)
1995: pt.content_type="text/html"
1996: return pt()
1.132 dwinter 1997: def changeAccessRightsCollection(self):
1998: """change"""
1999: ret=""
2000: argv=self.REQUEST.form
2001:
2002: resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'])
2003: for resource in resources:
2004:
2005: try:
2006: ret+=resource[1].getId()+" "+argv[resource[1].getId()]+"</br>"
2007: resource[1].changeAccessRightMD(argv[resource[1].getId()])
1.161 dwinter 2008: except:
2009: """not"""
2010: return ret
2011:
2012: def changeMetaDataLinkInCollection(self):
2013: """change all lables of a collection"""
2014: ret=""
2015: argv=self.REQUEST.form
2016:
2017: resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'])
2018: for resource in resources:
2019:
2020: try:
2021: ret+=resource[1].getId()+" "+argv[resource[1].getId()]+"</br>"
2022: resource[1].metalink=argv[resource[1].getId()][0:]
1.132 dwinter 2023: except:
2024: """not"""
2025: return ret
2026:
1.163 dwinter 2027: def changeMetaDataLinkInCollection(self):
1.133 dwinter 2028: """change all lables of a collection"""
2029: ret=""
2030: argv=self.REQUEST.form
2031:
2032: resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'])
2033: for resource in resources:
2034:
2035: try:
2036: ret+=resource[1].getId()+" "+argv[resource[1].getId()]+"</br>"
1.163 dwinter 2037: resource[1].metalink=argv[resource[1].getId()][0:]
2038: except:
2039: """not"""
2040: return ret
2041:
2042: def changeWeightsInCollection(self):
2043: """change all lables of a collection"""
2044: ret=""
2045: argv=self.REQUEST.form
2046:
2047: resources=self.ZopeFind(self,obj_metatypes=['ECHO_pageTemplate','ECHO_resource','ECHO_collection','ECHO_link','ECHO_externalLink'])
2048: for resource in resources:
2049:
2050: try:
2051: ret+=resource[1].getId()+" "+argv[resource[1].getId()]+"</br>"
2052: resource[1].weight=argv[resource[1].getId()][0:]
1.133 dwinter 2053: except:
2054: """not"""
2055: return ret
2056:
2057: def changeTitlesInCollection(self):
2058: """change all lables of a collection"""
2059: ret=""
2060: argv=self.REQUEST.form
2061:
2062: resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'])
2063: for resource in resources:
2064:
2065: try:
2066: ret+=resource[1].getId()+" "+argv[resource[1].getId()]+"</br>"
2067: resource[1].title=argv[resource[1].getId()][0:]
2068: except:
2069: """not"""
2070: return ret
2071:
1.130 dwinter 2072: def updateCollection(self,RESPONSE=None):
2073: """liest verzeichnisse aus dem pfad und legt sie dann als objekte in den ordner"""
2074: files=os.listdir(self.path)
2075: ret=""
2076: for fileName in files:
2077:
2078: if fileName:
2079:
2080: tempPath=re.sub("/mpiwg/online","",self.path)
2081: link="http://echo.mpiwg-berlin.mpg.de/zogilib_book?fn="+tempPath+"/"+fileName+"/pageimg"
2082:
2083: metalink=self.path+"/"+fileName+"/index.meta"
2084: try:
2085:
2086: #link="http://nausikaa2.mpiwg-berlin.mpg.de/cgi-bin/toc/toc.x.cgi?dir="+fileName+"&step=thumb"
2087:
2088: newObj=ECHO_resource(fileName,link,metalink,fileName,fileName,fileName,'generated','book','','','','','','')
2089: self._setObject(fileName,newObj)
2090:
2091: genObj=getattr(self,fileName)
2092: #genObj.createIndexFile()
2093: ret+="OK:"+fileName+"<br/>"
2094: except:
2095: print "ERROR"
2096: ret+="ERROR:"+fileName+"<br/>"
2097:
2098: return ret
2099:
2100: if RESPONSE is not None:
2101: RESPONSE.redirect('manage_main')
2102:
2103: def updateCollectionMD(self,RESPONSE=None):
2104: """updateMD"""
2105: files=os.listdir(self.path)
2106: for fileName in files:
2107: if fileName:
2108: genObj=getattr(self,fileName)
2109: genObj.copyIndex_meta2echo_resource()
2110: genObj.generate_title()
2111:
2112: if RESPONSE is not None:
2113: RESPONSE.redirect('manage_main')
2114:
2115:
1.123 dwinter 2116:
2117: def changeViewerTemplateSetsForm(self):
2118: """change the viewer template set"""
2119: pt=PageTemplateFile('Products/ECHO_content/zpt/changeViewerTemplateSet').__of__(self)
2120: return pt()
2121:
1.172 dwinter 2122: def getViewerTemplateSets(self,obj_ids=None,RESPONSE=None):
1.123 dwinter 2123: """Get the ViewerTemplateSet title for configuration"""
2124: ret=[]
2125:
2126: try:
2127: viewerTemplateSets=self.ZopeFind(self.viewerTemplateSets,obj_metatypes=['OSAS_viewerTemplateSet'],obj_ids=obj_ids)#assumes viewerTemplateSets folder somewhere in the hierarchie.
2128:
2129: for viewerTemplateSet in viewerTemplateSets:
2130: ret.append((viewerTemplateSet[1].title,viewerTemplateSet[0],viewerTemplateSet[1]))
1.172 dwinter 2131:
1.123 dwinter 2132: return ret
2133:
2134: except:
2135: return [('no ViewerTemplateSetfolders','')]
2136:
2137: def getTextToolsField(self,name,default=''):
2138: """Lese viewerTemplateSet der Collection not implemented yet!"""
2139:
2140: return default
2141:
2142:
2143: def isSelectedViewerTemplateSet(self,obj,id):
1.160 dwinter 2144: """is ausgewählt"""
1.123 dwinter 2145:
2146: if self.REQUEST['viewerTemplateSet']==id:
2147: return 1
2148: else:
2149: return None
2150:
1.155 dwinter 2151: def changeViewerTemplateSets(self,project,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix,RESPONSE=None):
1.123 dwinter 2152: """change the templates"""
2153:
1.153 dwinter 2154: resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1)
1.123 dwinter 2155:
2156: for resource in resources:
1.130 dwinter 2157:
1.155 dwinter 2158: resource[1].changeViewerTemplateSet(project,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix)
1.123 dwinter 2159:
2160: if RESPONSE is not None:
2161: RESPONSE.redirect('manage_main')
2162:
2163:
1.153 dwinter 2164: def setStartpageFolderForm(self):
2165: """Form for changing the startpage"""
2166:
2167:
2168: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resourceStartPageFolder.zpt').__of__(self)
2169: pt.content_type="text/html"
2170: return pt()
2171:
2172: def setStartpageFolder(self,startpage=None,RESPONSE=None):
2173: """change the templates"""
2174:
2175: resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1)
2176:
2177: for resource in resources:
2178:
2179: resource[1].setStartPage(startpage)
2180:
2181: if RESPONSE is not None:
2182: RESPONSE.redirect('manage_main')
2183:
2184:
2185:
1.130 dwinter 2186: def copySearchFields(self,RESPONSE=None):
2187: """copys import metadatafields to the object"""
2188: resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'])
2189:
2190: for resource in resources:
2191:
2192: resource[1].copySearchFields()
2193:
2194: if RESPONSE is not None:
2195: RESPONSE.redirect('manage_main')
1.153 dwinter 2196:
2197: def reloadMetaDataFromStorageWarning(self,RESPONSE=None):
2198: """warning"""
2199: pt=PageTemplateFile('Products/ECHO_content/zpt/reloadMetaDataFromStorageWarning.zpt').__of__(self)
2200: pt.content_type="text/html"
2201: return pt()
1.130 dwinter 2202:
2203: def reloadMetaDataFromStorage(self,RESPONSE=None):
2204: """copy metadata from the storage to ECHO"""
2205:
1.153 dwinter 2206: return reloadMetaDataFromStorage(self,RESPONSE=None)
1.130 dwinter 2207:
1.153 dwinter 2208:
1.98 dwinter 2209: def getPartnerCopyright(self,name,sonst="generic"):
2210: """gibt generisches copyright eines partners aus, sonst behalte jetzige einsteillung"""
2211: #print "hi",name,sonst
2212: #print getattr(self.partners,name).copyrightType
2213: try:
2214: partner=getattr(self.partners,name)
2215: return partner.copyrightType
2216: except:
2217: print "error"
2218: return sonst
2219:
2220: def partnerSelector_HTML(self,selected=None):
2221: """give type selector"""
2222: if not selected:
2223: retStr="<option selected>\n"
2224: else:
2225: retStr="<option>\n"
2226:
2227: try: # erste version copyrightTypes exists
2228: for partner in self.credits:
2229: if selected and (partner==selected):
2230: retStr+="""<option selected value="%s">%s\n"""%(partner,partner)
2231: else:
2232: retStr+="""<option value="%s">%s\n"""%(partner,partner)
2233: except:
2234: """nothing"""
2235: return retStr
2236:
1.69 dwinter 2237: def getViewClassification(self):
2238: if hasattr(self,'viewClassification'):
2239: return self.viewClassification
2240: else:
2241: return ""
1.48 dwinter 2242:
2243: def getTitle(self):
2244: """title"""
1.135 dwinter 2245: try:
2246: return self.title.encode('utf-8','ignore')
2247: except:
2248: self.title=self.title.decode('iso-8859-1','ignore')[0:] #correnct conding error
2249: return self.title.encode('utf-8','ignore')
2250:
1.48 dwinter 2251: def getLabel(self):
2252: """title"""
1.135 dwinter 2253: try:
2254: return self.label.encode('utf-8','ignore')
2255: except:
2256: self.label=self.label.decode('iso-8859-1','ignore')[0:] #correnct conding error
2257: return self.label.encode('utf-8','ignore')
2258:
1.45 dwinter 2259: def createRessourcesFromXMLForm(self):
2260: """form"""
2261: pt=PageTemplateFile('Products/ECHO_content/zpt/createRessourcesFromXMLForm.zpt').__of__(self)
2262: return pt()
1.83 dwinter 2263:
1.45 dwinter 2264: def createRessourcesFromXML(self,fileupload):
2265: """read an XML file for generating resources"""
2266: dom=xml.dom.minidom.parse(fileupload)
2267: ret="<h2>Added</h2>"
2268: for resource in dom.getElementsByTagName('resource'):
2269: link=getText(resource.getElementsByTagName('link')[0].childNodes)
2270: label=getText(resource.getElementsByTagName('label')[0].childNodes)
2271: #splitted=link.split("?")[0].split("/")
2272: #id=splitted[len(splitted)-1].encode('ascii')
2273: id=re.sub(" ","_",label).encode('ascii')
2274:
2275: ret+="<p>"+label+"</p>"
1.46 dwinter 2276: manage_addECHO_resource(self,id,label.encode('ascii'),label.encode('ascii'),"","","",link.encode('ascii'),"","")
1.45 dwinter 2277: return ret
1.136 casties 2278:
1.25 dwinter 2279: def getImageTag(self):
2280: """GetTag"""
2281: try:
2282: return self.imageTag
2283: except:
2284: return ""
2285:
1.27 dwinter 2286: def addResource(self,id,title,label,description,contentType,responsible,link,metalink,weight,credits=None,coords=None,RESPONSE=None):
1.24 dwinter 2287: """SSS"""
2288: try:
1.123 dwinter 2289: manage_addECHO_resource(self,id,title,label,description,responsible,link,metalink,weight,credits=None,coords=None,RESPONSE=None)
1.24 dwinter 2290: return "done"
2291: except:
2292: return None
1.32 dwinter 2293:
2294: def getSecondaryLink(self):
2295: """secondary link"""
2296: try:
2297: return self.secondaryLink
2298: except:
2299: return ""
2300:
2301: def getSecondaryLinkTitle(self):
2302: """secondary link"""
2303: try:
2304: return self.secondaryLinkTitle
2305: except:
2306: return ""
2307:
1.24 dwinter 2308: def getCollectionTreeXML(self):
2309: """Tree as XML"""
2310:
1.171 dwinter 2311: def addPassWd(str):
2312: """adds a user/passwd to an url"""
2313: txt2=re.sub(r"(http://)(.*?)","\g<1>www:3333@\g<2>",str)
2314: return txt2
2315:
1.24 dwinter 2316: def getCollection(object,depth=0):
2317: depth+=1
2318: collections=""
2319: for entry in object.__dict__.keys():
2320: element=getattr(object,entry)
2321: try:
1.40 dwinter 2322: if element.meta_type in ["ECHO_collection","ECHO_group"]:
1.171 dwinter 2323: collections+="<element name=\""+quote(element.title)+"\" url=\""+addPassWd(element.absolute_url())+"\">"
1.24 dwinter 2324: collections+=getCollection(element,depth)+"</element>\n"
2325: except:
2326: """nothing"""
2327: return collections
2328:
1.60 dwinter 2329: ret="""<?xml version="1.0" encoding="utf-8" ?>"""
2330: return ret+"<collection>"+getCollection(self)+"</collection>"
1.24 dwinter 2331:
1.23 dwinter 2332: def createJavaScript(self):
1.88 casties 2333: """OLD CreateJava"""
1.72 casties 2334: ret=javaScriptMain
1.23 dwinter 2335:
1.65 casties 2336: dynamical="\n"
1.23 dwinter 2337: for ob in self.getGraphicCoords():
1.47 casties 2338: if ob[4][4] == "":
1.72 casties 2339: dynamical+="""Coords.push(new Coord('%s', Img, %s));\n"""%(ob[1],ob[0])
2340: else:
2341: dynamical+="""Coords.push(new Coord('%s', Img, %s));//%s\n"""%(ob[1],ob[0],ob[4][4])
2342: dynamical+="ShowArrow(new getObj('i.%s'),Img,%s);\n"%(ob[1],ob[0])
2343: ret+=javaHandler%dynamical
2344: return ret
2345:
2346: def createJSAreas(self):
1.88 casties 2347: """create area calls for JavaScript"""
1.72 casties 2348: dynamical="\n"
2349: for ob in self.getGraphicCoords():
1.74 casties 2350: if ob[5] == "area":
1.65 casties 2351: dynamical+="""addArea('%s', 'overview', %s, 'area');\n"""%(ob[1],ob[0])
1.47 casties 2352: else:
1.65 casties 2353: dynamical+="""addArea('%s', 'overview', %s, 'arrow');\n"""%(ob[1],ob[0])
1.72 casties 2354: return dynamical
1.74 casties 2355:
2356: def createMapHead(self):
1.88 casties 2357: """create javascript include and script tags for head"""
1.74 casties 2358: pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt/ECHO_content_map_frag_js')).__of__(self)
2359: return pt()
1.87 casties 2360:
2361: def createMapImg(self):
2362: """generate img-tag for map"""
2363: bt = BrowserCheck(self)
2364: tag = ""
2365: src = self.REQUEST['URL1'] + "/overview"
2366: if bt.isN4:
2367: tag += '<ilayer id="overview" visibility="show"><img src="%s"></ilayer>'%src
2368: else:
2369: tag += '<img id="overview" src="%s" />'%src
2370: return tag
1.74 casties 2371:
2372: def createMapLink(self, ob, text=None):
2373: """generate map link"""
1.87 casties 2374: bt = BrowserCheck(self)
1.74 casties 2375: id = ob[1]
2376: link = ob[1]
2377: if text == None:
2378: text = ob[2]
1.87 casties 2379: tag = ""
2380: if bt.isN4:
2381: tag += '<ilayer id="a.%s"><a onmouseover="highlightPair(\'%s\', true)" onmouseout="highlightPair(\'%s\', false)" href="%s" target="_blank"'%(id,id,id,link)
2382: tag += ">" + text + "</a></ilayer>"
2383: else:
2384: tag = '<a id="a.%s" onmouseover="highlightPair(\'%s\', true)" onmouseout="highlightPair(\'%s\', false)" href="%s" target="_blank"'%(id,id,id,link)
2385: if ob[3].contentType == 'text-popup':
2386: tag += ' title="%s"'%ob[3].description
2387: tag += ">" + text + "</a>"
1.74 casties 2388: return tag
2389:
2390: def createMapAux(self, ob, arrowsrc="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?dw=15&fn=icons/pfeil"):
2391: """generate map link image, text and other stuff"""
2392: id = ob[1]
2393: link = ob[1]
2394: vtype = ob[5]
2395: ctype = ob[3].contentType
1.87 casties 2396: bt = BrowserCheck(self)
2397: tag = ""
2398:
2399: if bt.isN4:
2400: tag += '<layer id="i.%s" onmouseover="highlightPair(\'%s\', true)" onmouseout="highlightPair(\'%s\', false)">'%(id,id,id)
2401: if vtype == "view point":
2402: rot = ob[4][4]
2403: tag += '<a href="%s"><img border="0" src="%s&rot=%s" /></a>'%(link,arrowsrc,rot)
2404: else:
2405: tag += '<a href="%s"><img border="0" width="1000" height="1000" src="trans_img"'%(link)
2406: if ctype == "text-popup":
2407: desc = ob[3].description
2408: tag += ' alt="%s"'%desc
2409: tag += ' /></a>'
2410: tag += '</layer>'
1.74 casties 2411: else:
1.87 casties 2412: tag = '<a id="b.%s" onmouseover="highlightPair(\'%s\', true)" onmouseout="highlightPair(\'%s\', false)" href="%s" target="_blank">'%(id,id,id,link)
2413: if vtype == "view point":
2414: rot = ob[4][4]
2415: if bt.isIEWin and bt.versIE > 5:
2416: tag += '<span id="i.%s" style="position:absolute; top:-100px; left:-100px; border-style:none; border-width=1px; filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'%s&rot=%s\');"><img style="visibility:hidden" src="%s&rot=%s" /></span>'%(id,arrowsrc,rot,arrowsrc,rot)
2417: else:
2418: tag += '<img id="i.%s" src="%s&rot=%s" border="1" style="position:absolute; top:-100px; left:-100px; border-style:none;" />'%(id,arrowsrc,rot)
2419: else:
2420: if bt.isIEWin:
2421: tag += '<div id="i.%s" style="position:absolute; top:-100px; left:-100px;background:url(area_img)"'%(id)
2422: else:
2423: tag += '<div id="i.%s" style="position:absolute; top:-100px; left:-100px;"'%(id)
2424: if ctype == "text-popup":
2425: desc = ob[3].description
2426: tag += ' title="%s"'%desc
2427: tag += '> </div>'
2428: tag += '</a>'
1.74 casties 2429: return tag
2430:
1.1 casties 2431:
2432: security.declarePublic('getCreditObject')
2433: def getCreditObject(self,name):
2434: """credit id to credititem"""
1.15 dwinter 2435: try:
2436: return getattr(self.partners,name)
2437: except:
2438: return ""
1.17 dwinter 2439:
1.1 casties 2440: security.declarePublic('ECHO_generateNavBar')
2441: def ECHO_generateNavBar(self):
2442: """Erzeuge Navigationsbar"""
2443: link=""
2444: object="self"
2445: ret=[]
2446: path=self.getPhysicalPath()
2447: for element in path:
2448:
2449:
2450: if not element=="":
2451: object+="."+element
2452:
2453: label=eval(object).label
2454: link+="/"+element
2455: if not label=="":
2456: ret.append((label,link))
2457: return ret
2458:
2459: security.declarePublic('ECHO_rerenderLinksMD')
1.73 dwinter 2460:
1.49 dwinter 2461:
1.153 dwinter 2462: def ECHO_rerenderLinksMDWarning(self):
2463: """change form"""
2464: pt=PageTemplateFile('Products/ECHO_content/zpt/rerenderLinksWarning').__of__(self)
2465: pt.content_type="text/html"
2466: return pt()
1.91 dwinter 2467:
1.49 dwinter 2468:
1.153 dwinter 2469:
2470: def ECHO_rerenderLinksMD(self,obj=None,types=['title','label']):
2471: """Rerender all Links"""
2472: return ECHO_rerenderLinksMD(self,obj,types)
1.19 dwinter 2473:
1.153 dwinter 2474:
1.19 dwinter 2475: security.declarePublic('ECHO_newViewerLink')
1.1 casties 2476:
2477:
2478: def getCoords(self):
2479: try:
1.11 dwinter 2480:
2481: x= [string.join(x,",") for x in self.coords]
2482: return x
1.4 dwinter 2483:
1.11 dwinter 2484: except:
1.4 dwinter 2485:
1.1 casties 2486: return []
1.3 dwinter 2487:
1.34 dwinter 2488: def __init__(self,id,title,label,description,contentType,responsible,credits,weight,sortfield,coords,secondaryLinkTitle,secondaryLink,imageTag="",bgcolour=""):
1.91 dwinter 2489:
1.1 casties 2490:
2491: self.id = id
2492: """Festlegen der ID"""
2493: self.credits=toList(credits)
2494: self.label = label
2495: self.title=title
2496: self.description=description
1.27 dwinter 2497: self.contentType=contentType
1.1 casties 2498: self.responsible=responsible
1.25 dwinter 2499: self.imageTag=imageTag
1.1 casties 2500: self.weight=weight
2501: self.sortfield=sortfield
2502: coordsnew=[ string.split(x,",") for x in coords]
2503: self.coords=coordsnew
1.32 dwinter 2504: self.secondaryLinkTitle=secondaryLinkTitle
2505: self.secondaryLink=secondaryLink
1.35 dwinter 2506: self.bgcolour=bgcolour
1.32 dwinter 2507:
1.1 casties 2508:
1.154 dwinter 2509: manage_options = Folder.manage_options+ Cacheable.manage_options+(
1.13 dwinter 2510: {'label':'Main Config','action':'ECHO_collection_config'},
1.133 dwinter 2511: {'label':'Change Labels','action':'changeLabels'},
2512: {'label':'Change Titles','action':'changeTitles'},
1.163 dwinter 2513: {'label':'Change Weights','action':'changeWeights'},
1.153 dwinter 2514: {'label':'Rerender Labels and Titles','action':'ECHO_rerenderLinksMDWarning'},
1.1 casties 2515: {'label':'Graphics','action':'ECHO_graphicEntry'},
1.45 dwinter 2516: {'label':'create resources from XML','action':'createRessourcesFromXMLForm'},
1.153 dwinter 2517: {'label':'Set Startpage','action':'setStartpageFolderForm'},
1.155 dwinter 2518: {'label':'Change Viewer Templates and Image Viewer','action':'changeViewerTemplateSetsForm'},
1.153 dwinter 2519: {'label':'Reload Metadata','action':'reloadMetaDataFromStorageWarning'},
1.130 dwinter 2520: {'label':'ImportCollection','action':'updateCollection'},
2521: {'label':'Copy MD for indexing and search','action':'copySearchFields'},
1.1 casties 2522: )
2523:
1.19 dwinter 2524: def getOverview(self):
2525: """overview graphics"""
1.20 dwinter 2526:
2527: return self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['overview'])[0][1]
2528:
1.19 dwinter 2529:
1.1 casties 2530: def ECHO_graphicEntry(self):
2531: """DO nothing"""
1.20 dwinter 2532: overview = self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['overview'])
1.19 dwinter 2533:
1.20 dwinter 2534:
1.19 dwinter 2535: if overview:
1.13 dwinter 2536: pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_draw.zpt').__of__(self)
1.1 casties 2537: return pt()
2538: else:
2539: return "NO OVERVIEW GRAPHICS"
2540:
1.4 dwinter 2541: def ECHO_enterCoords(self,coordstr,angle="",RESPONSE=None):
1.1 casties 2542: """Enter coords"""
1.2 dwinter 2543: coords=self.coords
1.4 dwinter 2544: temco=coordstr.split(",")
2545: temco.append(angle)
2546: coords.append(temco)
1.2 dwinter 2547: self.coords=coords[0:]
1.13 dwinter 2548:
1.2 dwinter 2549: if RESPONSE is not None:
2550: RESPONSE.redirect('ECHO_graphicEntry')
1.1 casties 2551:
2552:
1.13 dwinter 2553: security.declarePublic('ECHO_collection_config')
2554: def ECHO_collection_config(self):
1.1 casties 2555: """Main configuration"""
2556:
2557: if not hasattr(self,'weight'):
2558: self.weight=""
2559:
2560: if not hasattr(self,'sortfield'):
2561: self.sortfield="weight"
1.13 dwinter 2562:
1.1 casties 2563: if not hasattr(self,'coords'):
2564: self.coords=[]
2565:
1.13 dwinter 2566: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_collection.zpt').__of__(self)
1.1 casties 2567: return pt()
2568:
2569:
1.13 dwinter 2570: security.declarePublic('changeECHO_collection')
1.1 casties 2571:
1.10 dwinter 2572:
1.34 dwinter 2573: def getBgcolour(self):
2574: """colour"""
2575: if hasattr(self,'bgcolour') and not (self.bgcolour==""):
2576: return self.bgcolour
2577: else:
2578: return "#dddddd"
2579:
1.168 dwinter 2580: def changeECHO_collection(self,title,label,description,contentType,responsible,weight,secondaryLink,secondaryLinkTitle,credits=None,sortfield="weight",coords=None,RESPONSE=None,imageTag="",bgcolour="",viewClassification=None,location=None,isAlwaysClickable=None):
1.71 casties 2581: """Aenderung der Properties"""
1.10 dwinter 2582:
1.32 dwinter 2583: self.secondaryLink=secondaryLink
2584: self.secondaryLinkTitle=secondaryLinkTitle
1.25 dwinter 2585: self.imageTag=imageTag
1.34 dwinter 2586: self.bgcolour=bgcolour
1.69 dwinter 2587: self.viewClassification=viewClassification
1.105 dwinter 2588: self.location=location
1.168 dwinter 2589: self.isAlwaysClickable=isAlwaysClickable
1.34 dwinter 2590:
1.32 dwinter 2591: if coords:
2592: coordsnew=[ string.split(x,",") for x in coords]
2593: self.coords=coordsnew[0:]
2594: else:
2595: coordsnew=None
2596: self.coords=None
2597:
2598: setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordsnew)
1.44 dwinter 2599: try:
2600: self.coords=coordsnew[0:] # HACK fehler in setECHO_collection
2601: except:
2602: """none"""
2603:
1.1 casties 2604: self.sortfield=sortfield
2605:
2606: if RESPONSE is not None:
2607: RESPONSE.redirect('manage_main')
2608:
1.169 dwinter 2609: def setAlwaysClickable(self,flag="yes"):
2610: """set clickable"""
2611: if flag=="yes":
2612: self.isAlwaysClickable="yes"
2613: else:
2614: self.isAlwaysClickable=None
1.23 dwinter 2615:
1.169 dwinter 2616: return flag
2617:
1.23 dwinter 2618: def showOverview(self):
2619: """overview"""
2620: if 'ECHO_overview.html' in self.__dict__.keys():
2621: return getattr(self,'ECHO_overview.html')()
2622: pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_content_overview.zpt').__of__(self)
2623: return pt()
2624:
1.84 dwinter 2625: security.declareProtected('View','index_html')
1.1 casties 2626:
2627: def index_html(self):
2628: """standard page"""
1.154 dwinter 2629: if self.ZCacheable_isCachingEnabled():
2630:
2631: result = self.ZCacheable_get()
2632: if result is not None:
2633: # Got a cached value.
2634: return result
2635:
1.1 casties 2636: if 'index.html' in self.__dict__.keys():
1.154 dwinter 2637: ret=getattr(self,'index.html')()
1.32 dwinter 2638:
1.1 casties 2639: elif 'overview' in self.__dict__.keys():
1.154 dwinter 2640: ret=self.showOverview()
1.32 dwinter 2641: elif hasattr(self,'collection_index_template'):
1.154 dwinter 2642: ret=self.collection_index_template()
1.54 dwinter 2643: elif hasattr(self,'main_index_template'):
1.154 dwinter 2644: ret=self.main_index_template()
2645: else:
2646: pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_main_index_template_standard.zpt').__of__(self)
2647: pt.content_type="text/html"
2648: ret=pt.render()
2649:
2650: self.ZCacheable_set(ret)
2651: return ret
1.1 casties 2652:
1.29 dwinter 2653: def content_html(self):
2654: """template fuer content"""
2655: return content_html(self,'collection')
2656:
1.11 dwinter 2657: def getCredits(self):
2658: """Ausgabe der credits"""
2659: if self.credits:
2660: return self.credits
2661: else:
2662: return []
1.1 casties 2663:
1.65 casties 2664: def area_img(self):
2665: """area image"""
1.88 casties 2666: bt = BrowserCheck(self)
1.89 casties 2667: if bt.isIE or bt.isN4:
1.88 casties 2668: return sendFile(self, 'images/red.gif', 'image/gif')
2669: else:
2670: return sendFile(self, 'images/reda.png', 'image/png')
1.87 casties 2671:
2672: def trans_img(self):
2673: """empty image"""
2674: return sendFile(self, 'images/trans.gif', 'image/gif')
1.65 casties 2675:
2676: def hl_lib_js(self):
2677: """javascript"""
1.79 casties 2678: return sendFile(self, 'js/hl_lib.js', 'text/plain')
1.65 casties 2679:
2680: def js_lib_js(self):
2681: """javascript"""
1.79 casties 2682: return sendFile(self, 'js/js_lib.js', 'text/plain')
1.23 dwinter 2683:
1.1 casties 2684: def getGraphicCoords(self):
2685: """Give list of coordinates"""
1.68 casties 2686: subColTypes=['ECHO_collection','ECHO_resource']
1.1 casties 2687: ids=[]
1.67 casties 2688: for entrySearch in self.ZopeFind(self,obj_metatypes=subColTypes):
1.66 dwinter 2689: object=entrySearch[1]
2690: if hasattr(object,'coords'):
2691: for coordtemp in object.coords:
2692: if len(coordtemp)>3:
2693: coord=coordtemp[0:4]
2694: label=""
1.70 casties 2695: vc=""
1.66 dwinter 2696: if hasattr(object,'label') and not object.label=="":
2697: label=object.label
2698: elif hasattr(object,'title') and not object.title=="":
2699: label=object.title
2700: else:
2701: label=object.getId()
1.70 casties 2702: if object.viewClassification != "":
2703: vc=object.viewClassification
2704: else:
2705: if len(coordtemp) > 4 and coordtemp[4] != "":
2706: vc="view point"
2707: else:
2708: vc="area"
2709: ids.append([string.join(coord,", "),object.getId(),label,object,coordtemp,vc])
1.1 casties 2710: return ids
2711:
1.42 dwinter 2712:
2713:
2714:
1.41 dwinter 2715: getSubCols = ECHO_helpers.getSubCols
1.84 dwinter 2716:
2717: Globals.InitializeClass(ECHO_collection)
1.1 casties 2718:
1.13 dwinter 2719: def manage_addECHO_collectionForm(self):
2720: """Add collection form"""
2721: pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_collectionForm.zpt').__of__(self)
1.1 casties 2722: return pt()
2723:
2724:
1.34 dwinter 2725: def manage_addECHO_collection(self,id,title,label,description,contentType,responsible,weight,sortfield,coords="",secondaryLinkTitle="",secondaryLink="",credits=None,RESPONSE=None,imageTag="",bgcolour=""):
1.13 dwinter 2726: """add a echo collection"""
1.1 casties 2727:
2728:
1.34 dwinter 2729: newObj=ECHO_collection(id,title,label,description,contentType,responsible,credits,weight,sortfield,coords,secondaryLinkTitle=secondaryLinkTitle,secondaryLink=secondaryLink,imageTag=imageTag,bgcolour="")
1.1 casties 2730:
2731: self._setObject(id,newObj)
1.13 dwinter 2732:
1.1 casties 2733: if RESPONSE is not None:
2734: RESPONSE.redirect('manage_main')
2735:
1.38 dwinter 2736: class ECHO_group(ECHO_collection):
2737: """ECHO Gruppe"""
1.84 dwinter 2738: security=ClassSecurityInfo()
1.38 dwinter 2739: meta_type="ECHO_group"
2740:
2741: manage_options = Folder.manage_options+(
2742: {'label':'Main Config','action':'ECHO_group_config'},
1.153 dwinter 2743: {'label':'Rerender Links','action':'ECHO_rerenderLinksMDWarning'},
1.38 dwinter 2744: {'label':'Graphics','action':'ECHO_graphicEntry'},
2745: )
1.84 dwinter 2746:
2747: security.declareProtected('View','index_html')
1.139 dwinter 2748:
1.148 dwinter 2749: def showRDF(self):
2750: """showrdf"""
2751: self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
2752: ret="""<?xml version="1.0" encoding="utf-8"?>\n<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:ECHONAVIGATION="http://www.echo.eu/rdf#">\n"""
2753: ret+=self.getRDF(urn="echo:collectionroot")+"\n"
2754:
2755: ret+="""</RDF:RDF>"""
2756:
2757: return ret
2758:
1.143 dwinter 2759: def getRDF(self,urn=None):
1.139 dwinter 2760: """rdf of the collection"""
2761: contents=self.ZopeFind(self,obj_metatypes=['ECHO_group','ECHO_resource','ECHO_collection'])
1.141 dwinter 2762:
1.148 dwinter 2763: ret=getRDFDescription(self,self.absolute_url(),urn=urn)
1.141 dwinter 2764:
2765:
1.148 dwinter 2766: if not urn:
2767: urn=self.absolute_url()
2768: li="""<RDF:li RDF:resource="%s" />\n"""
1.141 dwinter 2769:
1.139 dwinter 2770:
2771: for content in contents:
2772: ret+=content[1].getRDF()+"\n"
2773:
1.148 dwinter 2774: ret+="""<RDF:Seq RDF:about="%s">\n"""%urn
1.139 dwinter 2775: for content in contents:
1.148 dwinter 2776: nurn=content[1].absolute_url()
1.139 dwinter 2777: ret+=li%nurn
1.141 dwinter 2778: return ret+"</RDF:Seq>"
1.139 dwinter 2779:
1.52 dwinter 2780: def index_html(self):
2781: """standard page"""
2782: displayedObjects=self.ZopeFind(self,obj_metatypes=displayTypes)
1.61 dwinter 2783: #if (len(displayedObjects)==1) and (displayedObjects[0][1].meta_type=="ECHO_collection"): # nur ein Object dann redirect auf dieses Object
2784: # return self.REQUEST.RESPONSE.redirect(displayedObjects[0][1].absolute_url())
1.52 dwinter 2785:
2786: if 'index.html' in self.__dict__.keys():
2787: return getattr(self,'index.html')()
1.56 dwinter 2788:
1.52 dwinter 2789: elif 'overview' in self.__dict__.keys():
1.56 dwinter 2790: return self.showOverview()
1.52 dwinter 2791: elif hasattr(self,'group_index_template'):
1.56 dwinter 2792: return self.group_index_template()
2793: elif hasattr(self,'collection_index_template'):
2794: return self.collection_index_template()
1.54 dwinter 2795: elif hasattr(self,'main_index_template'):
1.55 dwinter 2796: return self.main_index_template()
1.52 dwinter 2797:
1.54 dwinter 2798: pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_main_index_template_standard.zpt').__of__(self)
1.52 dwinter 2799: pt.content_type="text/html"
2800: return pt()
2801:
1.38 dwinter 2802: def ECHO_group_config(self):
2803: """Main configuration"""
2804:
2805: if not hasattr(self,'weight'):
2806: self.weight=""
2807:
2808: if not hasattr(self,'sortfield'):
2809: self.sortfield="weight"
2810:
2811: if not hasattr(self,'coords'):
2812: self.coords=[]
2813:
2814: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_group.zpt').__of__(self)
2815: return pt()
2816:
1.43 dwinter 2817: def changeECHO_group(self,title,label,description,contentType,responsible,weight,secondaryLink,secondaryLinkTitle,credits=None,sortfield="weight",coords=None,RESPONSE=None,imageTag="",bgcolour="",logo=""):
1.160 dwinter 2818: """Ănderung der Properties"""
1.38 dwinter 2819:
2820: self.secondaryLink=secondaryLink
2821: self.secondaryLinkTitle=secondaryLinkTitle
2822: self.imageTag=imageTag
2823: self.bgcolour=bgcolour
1.43 dwinter 2824: self.logo=logo
2825:
1.38 dwinter 2826: if coords:
2827: coordsnew=[ string.split(x,",") for x in coords]
2828: self.coords=coordsnew[0:]
2829: else:
2830: coordsnew=None
2831: self.coords=None
2832:
2833: setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordsnew)
2834:
2835:
2836:
2837: self.sortfield=sortfield
2838:
2839: if RESPONSE is not None:
2840: RESPONSE.redirect('manage_main')
1.40 dwinter 2841:
2842: def getLogo(self):
2843: """logo ausgeben"""
1.43 dwinter 2844: try:
2845: return self.logo
2846: except:
2847: return "ECHO_groups"
1.40 dwinter 2848:
1.38 dwinter 2849: def content_html(self):
2850: """template fuer content"""
2851: return content_html(self,'group')
2852:
2853:
2854:
2855: def manage_addECHO_groupForm(self):
2856: """Add group form"""
2857: pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_groupForm.zpt').__of__(self)
2858: return pt()
2859:
2860:
1.43 dwinter 2861: def manage_addECHO_group(self,id,title,label,description,contentType,responsible,weight,sortfield,coords="",secondaryLinkTitle="",secondaryLink="",credits=None,RESPONSE=None,imageTag="",bgcolour="",logo=""):
1.38 dwinter 2862: """add a echo group"""
2863:
2864:
2865: newObj=ECHO_group(id,title,label,description,contentType,responsible,credits,weight,sortfield,coords,secondaryLinkTitle=secondaryLinkTitle,secondaryLink=secondaryLink,imageTag=imageTag,bgcolour="")
2866:
1.43 dwinter 2867: setattr(newObj,'logo',logo)
1.38 dwinter 2868: self._setObject(id,newObj)
1.43 dwinter 2869:
1.38 dwinter 2870: if RESPONSE is not None:
2871: RESPONSE.redirect('manage_main')
2872:
1.84 dwinter 2873: Globals.InitializeClass(ECHO_group)
1.85 dwinter 2874:
2875:
2876: class ECHO_userFolder(UserFolder):
2877: """User folder for Intranet"""
2878: _domain_auth_mode=1 # Identification via domain
2879: meta_type="ECHO_userFolder"
1.38 dwinter 2880:
1.85 dwinter 2881: def authenticate(self, name, password, request):
2882: emergency = self._emergency_user
2883: if name is None:
2884: return None
2885: if emergency and name==emergency.getUserName():
2886: user = emergency
2887: else:
2888: user = self.getUser(name)
2889: if user is not None and user.authenticate(password, request):
2890: return user
2891: else:
2892: return None
2893:
2894: def domainSpecMatch(self,spec, request):
2895: host=''
2896: addr=''
2897:
2898: # Fast exit for the match-all case
2899: if len(spec) == 1 and spec[0] == '*':
2900: return 1
2901:
2902: if request.has_key('REMOTE_HOST'):
2903: host=request['REMOTE_HOST']
2904:
2905: if request.has_key('REMOTE_ADDR'):
2906: addr=request['REMOTE_ADDR']
2907:
2908: if request.has_key('HTTP_X_FORWARDED_FOR'):
2909: addr=request['HTTP_X_FORWARDED_FOR']
2910:
2911:
2912: if not host and not addr:
2913: return 0
2914:
2915: if not host:
2916: try: host=socket.gethostbyaddr(addr)[0]
2917: except: pass
2918: if not addr:
2919: try: addr=socket.gethostbyname(host)
2920: except: pass
2921:
2922:
2923: _host=host.split('.')
2924: _addr=addr.split('.')
2925: _hlen=len(_host)
2926: _alen=len(_addr)
2927:
2928: for ob in spec:
2929: sz=len(ob)
2930: _ob=ob.split('.')
2931: _sz=len(_ob)
2932:
2933: mo = addr_match(ob)
2934: if mo is not None:
2935: if mo.end(0)==sz:
2936: fail=0
2937: for i in range(_sz):
2938: a=_addr[i]
2939: o=_ob[i]
2940: if (o != a) and (o != '*'):
2941: fail=1
2942: break
2943: if fail:
2944: continue
2945: return 1
2946:
2947: mo = host_match(ob)
2948: if mo is not None:
2949: if mo.end(0)==sz:
2950: if _hlen < _sz:
2951: continue
2952: elif _hlen > _sz:
2953: _item=_host[-_sz:]
2954: else:
2955: _item=_host
2956: fail=0
2957: for i in range(_sz):
2958: h=_item[i]
2959: o=_ob[i]
2960: if (o != h) and (o != '*'):
2961: fail=1
2962: break
2963: if fail:
2964: continue
2965: return 1
2966: return 0
2967:
2968: Globals.default__class_init__(ECHO_userFolder)
2969:
2970:
2971:
2972: def manage_addECHO_userFolder(self,dtself=None,REQUEST=None,**ignored):
2973: """add a user folder """
2974: f=ECHO_userFolder()
2975: self=self.this()
2976: try: self._setObject('acl_users', f)
2977: except: return MessageDialog(
2978: title ='Item Exists',
2979: message='This object already contains a User Folder',
2980: action ='%s/manage_main' % REQUEST['URL1'])
2981: self.__allow_groups__=f
2982: if REQUEST is not None:
2983: REQUEST['RESPONSE'].redirect(self.absolute_url()+'/manage_main')
2984:
2985: def manage_addECHO_userFolderForm(self):
2986: """add a user folder form"""
2987: return manage_addECHO_userFolder(self)
2988:
1.165 dwinter 2989:
2990:
1.167 dwinter 2991: def createNode(self,descrs,node):
1.165 dwinter 2992: name=descrs[node]['name']
2993: type=descrs[node]['type']
2994: urn=node
1.167 dwinter 2995: #print " will create",node.encode('utf-8')
1.165 dwinter 2996: id=re.sub('[^a-zA-Z0-9]','',name).encode('ascii','ignore')
2997: #print "id",id
2998: #print type
2999: #self.REQUEST.RESPONSE.write("<p>%s<p>\n"%id)
3000: if type=="CDLI_group":
3001:
3002: try:
3003: manage_addECHO_collection(self,id,name,name,"","","","","")
3004:
3005: except:
3006: self.REQUEST.RESPONSE.write("<p>Error%s</p>\n"%id)
3007:
3008: self.REQUEST.RESPONSE.write("<p>Creates:%s</p>\n"%getattr(self,id).absolute_url())
3009:
3010: return type,getattr(self,id),urn
3011:
3012: if type=="CDLI_item":
3013: try:
3014: manage_addECHO_resource(self,id,name,name,"","",urn,"","")
3015: except:
3016: self.REQUEST.RESPONSE.write("<p>Error%s</p>\n"%id)
3017: self.REQUEST.RESPONSE.write("<p>Creates:%s</p>\n"%getattr(self,id).absolute_url())
3018:
3019:
3020: return "XX"
3021:
3022:
1.1 casties 3023: class ECHO_root(Folder,Persistent,Implicit):
3024: """ECHO Root Folder"""
1.85 dwinter 3025:
3026: security=ClassSecurityInfo()
3027:
1.1 casties 3028: meta_type="ECHO_root"
1.165 dwinter 3029:
1.167 dwinter 3030: ###CDLI adds -> have to be removed
1.165 dwinter 3031: def getTablet(self,item):
1.167 dwinter 3032: #print "getTablet"
3033: try:
3034: read=urllib.urlopen("http://enlil.museum.upenn.edu/cgi-bin/cdlget.plx?item=%s&project=ncdl"%item).read()
3035: read=re.sub("\[search\]","search",read)
3036: return read[read.find("<body>")+6:read.rfind("</body>")]
3037: except:
3038: return "<h1>Sorry no connection to the data server enlil.museum.upenn.edu</h1>"
3039: #return "http://enlil.museum.upenn.edu/cgi-bin/cdlget.plx?item=%s&project=ncdl"
3040: ###END CDLI add
3041:
1.177 dwinter 3042: def sendForm(self,fromaddr,content,server='mail.mpiwg-berlin.mpg.de'):
3043: """sendform"""
3044: toaddrs=["dwinter@mpiwg-berlin.mpg.de"]
3045:
3046: msg = ("From: %s\r\nTo: %s\r\nSubject: %s\r\n\r\n"
3047: % (fromaddr, ", ".join(toaddrs),"testsub"))
3048: server = smtplib.SMTP(server)
3049: #server.set_debuglevel(1)
3050: msg=msg+content
3051: server.sendmail(fromaddr, toaddrs, msg)
3052: server.quit()
3053:
1.167 dwinter 3054: def generateFromRDFForm(self):
3055: """change form"""
3056: pt=PageTemplateFile('Products/ECHO_content/zpt/generateFromRDFForm').__of__(self)
3057: pt.content_type="text/html"
3058: return pt()
3059:
3060: def generateFromRDF(self,file,startNode="/Cuneiform Corpus"):
3061:
3062: """generate from RDF"""
1.165 dwinter 3063:
3064: global seqs
3065: seqs={}
3066: global descrs
3067: descrs={}
3068: global key
3069: key=""
3070: global value
3071: value=""
1.167 dwinter 3072:
3073: def getEdges(seqs,urn):
3074: """edges"""
3075: ret=[]
3076: return seqs[urn]
3077:
3078: def createSubs(self,seqs,descrs,urn,level=0):
3079: """create subs"""
3080: for edge in getEdges(seqs,urn):
3081: cn=createNode(self,descrs,edge)
3082: if cn[0]=="CDLI_group":
3083: createSubs(cn[1],seqs,descrs,cn[2],level+1)
3084: return
3085:
1.165 dwinter 3086: def start_element(name,attrs):
3087:
3088: global seqs
3089: global descrs
3090: global key
3091: global value
3092: seq=""
3093: if name=="RDF:Seq":
3094: key=attrs.get('RDF:about')
3095: try: # teste ob liste
3096: x=seqs[key][0]
3097: except:
3098:
3099: seqs[key]=[]
3100:
3101:
3102: elif name=="RDF:Description":
3103: key=attrs.get('RDF:about')
3104:
3105:
3106: elif name=="RDF:li":
3107: name=attrs.get('RDF:resource')
3108: seqs[key].append(name)
3109:
3110: elif name=="ECHONAVIGATION:type":
3111: value="type"
3112:
3113: elif name=="ECHONAVIGATION:name":
3114: value="name"
3115: elif name=="ECHONAVIGATION:linkClickable":
3116: value="linkClickable"
3117:
3118: def end_element(name):
3119: """nothing"""
3120: key=""
3121: value=""
3122:
3123: def char_data(data):
3124: """nothing"""
3125:
3126: data=re.sub("\n","",data)
3127: try:
3128: if descrs[key].has_key(value):
3129: descrs[key][value]+=data
3130: else:
3131: descrs[key][value]=data
3132: except:
3133:
3134: descrs[key]={}
3135: descrs[key][value]=data
3136:
3137: p = xml.parsers.expat.ParserCreate()
3138:
3139: p.StartElementHandler = start_element
3140: p.EndElementHandler = end_element
3141: p.CharacterDataHandler = char_data
3142:
1.167 dwinter 3143:
3144: p.ParseFile(file)
1.165 dwinter 3145: self.REQUEST.RESPONSE.write("<html><body><h1>Start</h1>")
1.167 dwinter 3146: createSubs(self,seqs,descrs,startNode)
1.165 dwinter 3147: self.REQUEST.RESPONSE.write("<h1>done</h1></body></html>")
1.167 dwinter 3148: #print "done"
1.165 dwinter 3149:
3150:
3151: return "done"
3152:
1.167 dwinter 3153:
1.165 dwinter 3154:
1.167 dwinter 3155:
1.163 dwinter 3156: def changeWeightsInCollection(self):
3157: """change all lables of a collection"""
3158: ret=""
3159: argv=self.REQUEST.form
3160:
3161: resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource','ECHO_collection','ECHO_link','ECHO_externalLink'])
3162: for resource in resources:
3163:
3164: try:
3165: ret+=resource[1].getId()+" "+argv[resource[1].getId()]+"</br>"
3166: resource[1].weight=argv[resource[1].getId()][0:]
3167: except:
3168: """not"""
3169: return ret
1.153 dwinter 3170:
1.163 dwinter 3171: def changeWeights(self):
3172: """change form"""
3173: pt=PageTemplateFile('Products/ECHO_content/zpt/changeWeightForm').__of__(self)
3174: pt.content_type="text/html"
3175: return pt()
3176: getSubCols = ECHO_helpers.getSubCols
1.153 dwinter 3177:
3178: manage_options=Folder.manage_options+(
3179: {'label':'Main Config','action':'ECHO_copyright_configForm'},
3180: {'label':'Reload Metadata','action':'reloadMetaDataFromStorageWarning'},
1.163 dwinter 3181: {'label':'Change Weights','action':'changeWeights'},
1.167 dwinter 3182: {'label':'Generate from RDF','action':'generateFromRDFForm'},
3183:
3184: )
1.153 dwinter 3185:
1.141 dwinter 3186:
3187: def showRDF(self):
3188: """showrdf"""
3189: self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
1.145 dwinter 3190: ret="""<?xml version="1.0" encoding="utf-8"?>\n<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:ECHONAVIGATION="http://www.echo.eu/rdf#">\n"""
1.143 dwinter 3191: ret+=self.getRDF(urn="echo:collectionroot")+"\n"
3192:
1.141 dwinter 3193: ret+="""</RDF:RDF>"""
3194: return ret
3195:
1.153 dwinter 3196:
3197: def reloadMetaDataFromStorageWarning(self,RESPONSE=None):
3198: """warning"""
3199: pt=PageTemplateFile('Products/ECHO_content/zpt/reloadMetaDataFromStorageWarning.zpt').__of__(self)
3200: pt.content_type="text/html"
3201: return pt()
3202:
3203: def reloadMetaDataFromStorage(self,RESPONSE=None):
3204: """reload MD from Storage"""
3205:
3206: return reloadMetaDataFromStorage(self,RESPONSE)
3207:
1.143 dwinter 3208: def getRDF(self,urn=None):
1.141 dwinter 3209: """rdf of the collection"""
1.143 dwinter 3210:
1.141 dwinter 3211: contents=self.ZopeFind(self,obj_metatypes=['ECHO_group','ECHO_resource','ECHO_collection'])
3212:
1.143 dwinter 3213: ret=getRDFDescription(self,self.absolute_url(),urn=urn)
1.141 dwinter 3214:
1.148 dwinter 3215: li="""<RDF:li RDF:resource="%s" />\n"""
1.141 dwinter 3216:
3217:
3218: for content in contents:
3219: ret+=content[1].getRDF()+"\n"
3220:
1.148 dwinter 3221: ret+="""<RDF:Seq RDF:about="%s">\n"""%urn
1.141 dwinter 3222: for content in contents:
1.148 dwinter 3223: nurn=content[1].absolute_url()
1.141 dwinter 3224: ret+=li%nurn
3225: return ret+"</RDF:Seq>"
3226:
1.90 dwinter 3227:
1.130 dwinter 3228: def showContent(self,path):
3229: """return content/html"""
3230:
1.163 dwinter 3231: return ECHO_helpers.urlopen(path+"/content_html").read()
1.130 dwinter 3232:
3233: def getImageViewers(self):
3234: """images"""
3235: viewers=self.ZopeFind(self.standardImageViewer,obj_metatypes=['OSAS_ViewerObject'])
3236: return viewers
3237:
1.90 dwinter 3238:
3239: def getBibTag(self,tag,content):
1.160 dwinter 3240: """get field tag fĂźr index-meta-generation"""
1.90 dwinter 3241: if not content or content=="":
3242: return ""
3243: ret="<%s>"%tag
1.95 dwinter 3244: #ret+=urllib.quote(content)
3245: ret+=content
3246:
1.90 dwinter 3247: ret+="</%s>"%tag
3248: return ret
3249:
3250: def getValueFromClass(self,field,found):
3251: """retattribute falss existing"""
3252: try:
1.95 dwinter 3253:
3254: return getattr(found,field).decode('ascii','ignore')
1.90 dwinter 3255: except:
3256: return ""
1.49 dwinter 3257:
3258: def getImageTag(self):
3259: """needed by main_template"""
3260: return ""
3261: secondaryLink="" #needed by main_template
3262: secondaryLinkTitle="" #needed by main_template
3263:
1.35 dwinter 3264: def getBgcolour(self):
3265: """hack"""
3266: return "#dddddd"
1.28 dwinter 3267:
3268: def contentTypeSelector_HTML(self,selected=None):
3269: """give type selector"""
3270: if not selected:
3271: retStr="<option selected>\n"
3272: else:
3273: retStr="<option>\n"
3274:
1.62 dwinter 3275: try: # erste version contentTypes exists
1.73 dwinter 3276: for contentType in self.ZopeFind(self.contentTypes,obj_metatypes=["ECHO_contentType","OSAS_MetadataMapping"]):
1.28 dwinter 3277: if selected and (contentType[0]==selected):
3278: retStr+="""<option selected value="%s">%s\n"""%(contentType[0],contentType[0])
3279: else:
3280: retStr+="""<option value="%s">%s\n"""%(contentType[0],contentType[0])
3281: except:
1.62 dwinter 3282: try:
3283: for contentType in self.ZopeFind(self.standardMD,obj_metatypes=["OSAS_MetadataMapping"]):
3284: if selected and (contentType[0]==selected):
3285: retStr+="""<option selected value="%s">%s\n"""%(contentType[0],contentType[0])
3286: else:
3287: retStr+="""<option value="%s">%s\n"""%(contentType[0],contentType[0])
3288: except:
3289: """nothing"""
3290:
1.73 dwinter 3291: return retStr
3292:
3293: def renderingTypeSelector_HTML(self,selected=None):
3294: """give type selector"""
3295: if not selected:
3296: retStr="<option selected>\n"
3297: else:
3298: retStr="<option>\n"
3299:
3300: try: # erste version renderingTypes exists
3301: for renderingType in self.ZopeFind(self.renderingTypes,obj_metatypes=["ECHO_renderingType"]):
3302: if selected and (renderingType[0]==selected):
3303: retStr+="""<option selected value="%s">%s\n"""%(renderingType[0],renderingType[0])
3304: else:
3305: retStr+="""<option value="%s">%s\n"""%(renderingType[0],renderingType[0])
3306: except:
3307: """nothing"""
3308: return retStr
3309:
3310: def renderingTypeSelector_HTML(self,selected=None):
3311: """give type selector"""
3312: if not selected:
3313: retStr="<option selected>\n"
3314: else:
3315: retStr="<option>\n"
3316:
3317: try: # erste version renderingTypes exists
3318: for renderingType in self.ZopeFind(self.renderingTypes,obj_metatypes=["ECHO_renderingType"]):
3319: if selected and (renderingType[0]==selected):
3320: retStr+="""<option selected value="%s">%s\n"""%(renderingType[0],renderingType[0])
3321: else:
3322: retStr+="""<option value="%s">%s\n"""%(renderingType[0],renderingType[0])
3323: except:
3324: """nothing"""
3325: return retStr
3326:
3327:
1.151 jdamerow 3328: def copyrightTypeSelector_HTML(self, object=None, selected=None,first=None):
1.73 dwinter 3329: """give type selector"""
1.104 dwinter 3330:
3331: if not first:
3332: if not selected:
3333: retStr="<option selected>\n"
3334: else:
3335: retStr="<option>\n"
1.73 dwinter 3336: else:
1.104 dwinter 3337: if not selected:
3338: retStr="""<option selected value="%s">%s\n"""%first
3339: else:
3340: retStr="""<option value="%s">%s\n"""%first
1.98 dwinter 3341:
3342:
3343: try: # erste version copyrightTypes exists
3344: for copyrightType in self.ZopeFind(self.copyrightTypes,obj_metatypes=["ECHO_copyrightType"]):
3345: if selected and (copyrightType[0]==selected):
3346: retStr+="""<option selected value="%s">%s\n"""%(copyrightType[0],copyrightType[0])
3347: else:
3348: retStr+="""<option value="%s">%s\n"""%(copyrightType[0],copyrightType[0])
1.151 jdamerow 3349:
3350: for copyrightTypeSelf in self.ZopeFind(object,obj_metatypes=["ECHO_copyrightType"],search_sub=1):
1.152 jdamerow 3351: if selected and (copyrightTypeSelf[0]==selected):
3352: retStr+="""<option selected value="%s">%s\n"""%(copyrightTypeSelf[0],copyrightTypeSelf[0])
3353: else:
1.151 jdamerow 3354: retStr+="""<option value="%s">%s\n"""%(copyrightTypeSelf[0],copyrightTypeSelf[0])
3355:
1.98 dwinter 3356: except:
1.151 jdamerow 3357: """nothing"""
3358:
1.98 dwinter 3359: return retStr
3360:
3361: def partnerSelector_HTML(self,selected=None):
3362: """give type selector"""
3363: if not selected:
3364: retStr="<option selected>\n"
3365: else:
3366: retStr="<option>\n"
1.73 dwinter 3367:
3368: try: # erste version copyrightTypes exists
1.98 dwinter 3369: for copyrightType in self.ZopeFind(self.partners,obj_metatypes=["ECHO_partner"]):
1.73 dwinter 3370: if selected and (copyrightType[0]==selected):
3371: retStr+="""<option selected value="%s">%s\n"""%(copyrightType[0],copyrightType[0])
3372: else:
3373: retStr+="""<option value="%s">%s\n"""%(copyrightType[0],copyrightType[0])
3374: except:
3375: """nothing"""
3376: return retStr
1.98 dwinter 3377:
1.160 dwinter 3378: mediaTypes=['all','text','images','sound','video'] # konfigurierbar in neuer version Ăźber echoroot??
1.98 dwinter 3379:
3380: def mediaTypeSelector_HTML(self,selected=None):
3381: """give type selector"""
3382: if not selected:
3383: retStr="<option selected>\n"
3384: else:
3385: retStr="<option>\n"
3386:
3387: try: # erste version mediatypesTypes exists
3388: for mediaType in self.mediaTypes:
3389: if selected and (mediaType in selected):
3390: retStr+="""<option selected value="%s">%s\n"""%(mediaType,mediaType)
3391: else:
3392: retStr+="""<option value="%s">%s\n"""%(mediaType,mediaType)
3393: except:
3394: """nothing"""
3395: return retStr
1.73 dwinter 3396:
1.28 dwinter 3397:
1.27 dwinter 3398: def patchContentType(self,obj=None):
3399: """austauschen content_type with contentType (patch bei umstieg von alter Version)"""
3400:
3401:
3402: if not obj:
3403: obj = self
3404:
1.30 dwinter 3405: entries=obj.ZopeFind(obj,obj_metatypes=['ECHO_resource','ECHO_collection','ECHO_externalLink','ECHO_pageTemplate'])
1.27 dwinter 3406:
3407: for entry in entries:
1.31 dwinter 3408: setattr(entry[1],'contentType',entry[1].content_type)
3409: #entry[1].contentType == entry[1].content_type
1.27 dwinter 3410:
3411: if entry[1].meta_type == 'ECHO_collection':
3412: entry[1].patchContentType(entry[1])
1.19 dwinter 3413:
1.27 dwinter 3414:
1.49 dwinter 3415: return "changed all contenttypes in: "+self.title
1.63 dwinter 3416:
3417:
3418: def patchViewClassification(self,obj=None):
3419: """setze viewClassification heuristisch"""
3420:
3421: def checkIfArrow(obj):
3422: if hasattr(obj,'coords'):
3423: for coordtemp in obj.coords:
1.91 dwinter 3424:
1.64 dwinter 3425: if (len(coordtemp)>4) and not (coordtemp[4]==''):
1.63 dwinter 3426: return 4
3427: return None
3428: return None
3429:
3430: if not obj:
3431: obj = self
3432:
3433: entries=obj.ZopeFind(obj,obj_metatypes=['ECHO_resource','ECHO_collection','ECHO_group'])
3434:
3435: for entry in entries:
3436:
1.64 dwinter 3437: if checkIfArrow(entry[1]):
1.63 dwinter 3438: setattr(entry[1],'viewClassification','view point')
3439: else:
3440: setattr(entry[1],'viewClassification','area')
3441:
3442: #entry[1].contentType == entry[1].content_type
3443:
3444: if entry[1].meta_type in ['ECHO_collection','ECHO_group']:
3445: entry[1].patchViewClassification(entry[1])
3446:
3447:
3448: return "changed all contenttypes in: "+self.title
1.166 dwinter 3449:
1.167 dwinter 3450: def deleteCache(self,obj=None,RESPONSE=None):
1.166 dwinter 3451: """setze alle collections auf cache = CacheManager"""
3452:
1.167 dwinter 3453:
1.166 dwinter 3454: if not obj:
3455: obj = self
3456:
1.167 dwinter 3457: entries=obj.ZopeFind(obj,search_sub=1)
1.63 dwinter 3458:
1.166 dwinter 3459: for entry in entries:
1.167 dwinter 3460: if hasattr(entry[1],'_v_hash'):
3461: entry[1]._v_hash=None
3462:
3463:
1.166 dwinter 3464:
3465:
3466: return "changed all CM in: "+self.title
1.167 dwinter 3467:
3468:
1.166 dwinter 3469:
1.19 dwinter 3470: def ECHO_newViewerLink(self,obj=None):
3471: """change links (:86 faellt weg)"""
3472:
3473: if not obj:
3474: obj = self
3475:
3476: entries=obj.ZopeFind(obj,obj_metatypes=['ECHO_resource','ECHO_collection'])
3477:
3478: for entry in entries:
3479:
3480: if entry[1].meta_type == 'ECHO_resource':
3481:
3482: entry[1].link=re.sub('\:86','',entry[1].link)
3483:
3484: else:
3485:
3486: entry[1].ECHO_newViewerLink(entry[1])
3487:
3488: return "Rerenderd all links to resources in: "+self.title
1.1 casties 3489:
3490: def __init__(self,id,title):
3491: """init"""
3492: self.id = id
3493: self.title=title
1.13 dwinter 3494:
1.14 dwinter 3495: def deleteSpace(self,str):
3496: """delete space at the end of a line"""
3497: if str[len(str)-1]==" ":
3498: return str[0:len(str)-1]
3499: else:
3500: return str
3501:
3502:
3503:
3504: # zusaetliche methoden fuer das vlp muessen in ein eigenes produkt
3505:
3506: def formatAscii(self,str,url=None):
3507: """ersetze ascii umbrueche durch <br>"""
3508: #url=None
3509: if url:
3510:
3511: retStr=""
3512: words=str.split("\n")
3513:
3514: for word in words:
3515: strUrl=url%word
1.91 dwinter 3516:
1.14 dwinter 3517: retStr+="""<a href="%s">%s</a><br/>"""%(strUrl,word)
3518: str=retStr
3519: if str:
3520: return re.sub(r"[\n]","<br/>",str)
3521: else:
3522: return ""
3523:
3524: def link2html(self,str):
3525: """link2html fuer VLP muss hier noch raus"""
3526: if str:
1.91 dwinter 3527:
1.14 dwinter 3528: str=re.sub("\&","&",str)
1.108 dwinter 3529: dom=xml.dom.minidom.parseString("<?xml version='1.0' encoding='utf-8'?><txt>"+str+"</txt>")
1.14 dwinter 3530: links=dom.getElementsByTagName("link")
3531:
1.91 dwinter 3532:
1.14 dwinter 3533: for link in links:
3534: link.tagName="a"
1.168 dwinter 3535: ref=link.getAttribute("ref")
3536: pn=link.getAttribute("page")
3537:
1.14 dwinter 3538: if self.checkRef(ref):
1.168 dwinter 3539: if pn:
3540: link.setAttribute("href",self.aq_parent.absolute_url()+"/vlp_coll?id="+ref+"&p="+pn)
3541: else:
3542: link.setAttribute("href",self.aq_parent.absolute_url()+"/vlp_coll?id="+ref)
3543:
1.14 dwinter 3544:
1.113 dwinter 3545: newxml=dom.toxml('utf-8')
1.162 dwinter 3546:
3547: retStr=regexpTXT.search(newxml)
3548:
3549: return retStr.group(1)
3550:
1.113 dwinter 3551:
1.14 dwinter 3552: return ""
3553:
1.160 dwinter 3554: def xml2html(self,str,quote="yes"):
1.110 dwinter 3555: """link2html fuer VLP muss hier noch raus"""
1.168 dwinter 3556:
1.110 dwinter 3557: if str:
1.160 dwinter 3558: if quote=="yes2":
3559: str=re.sub("\&","&",str)
1.173 dwinter 3560: #dom=xml.dom.minidom.parseString(str)
3561: dom = NonvalidatingReader.parseString(str,"http://www.mpiwg-berlin.mpg.de/")
3562: #links=dom.getElementsByTagName("link")
3563: links=Ft.Xml.XPath.Evaluate(".//link", contextNode=dom)
1.110 dwinter 3564: for link in links:
1.173 dwinter 3565: #link.tagName="a"
1.175 dwinter 3566:
1.173 dwinter 3567: ref=link.getAttributeNS(EMPTY_NAMESPACE,"ref")
3568: pn=link.getAttributeNS(EMPTY_NAMESPACE,"page")
1.175 dwinter 3569:
3570: cns=link.childNodes[0:]
1.173 dwinter 3571:
3572: newLink=dom.createElementNS(EMPTY_NAMESPACE,"a")
1.175 dwinter 3573: for x in cns:
3574: newLink.appendChild(x)
3575:
3576:
1.173 dwinter 3577:
3578: link.parentNode.replaceChild(newLink,link)
1.110 dwinter 3579: if self.checkRef(ref):
1.168 dwinter 3580: if pn:
1.173 dwinter 3581: newLink.setAttributeNS(EMPTY_NAMESPACE,"href",self.aq_parent.absolute_url()+"/vlp_coll?id="+ref+"&p="+pn)
1.168 dwinter 3582: else:
1.173 dwinter 3583: newLink.setAttributeNS(EMPTY_NAMESPACE,"href",self.aq_parent.absolute_url()+"/vlp_coll?id="+ref)
1.110 dwinter 3584:
1.173 dwinter 3585: #str= dom.toxml('utf-8')
3586: buf = cStringIO.StringIO()
3587: PrettyPrint(dom, stream=buf, encoding='UTF-8')
3588: str = buf.getvalue()
3589: buf.close()
3590: #str=PrettyPrint(dom.documentElement,encoding='UTF-8')
1.163 dwinter 3591: #print link.toxml('utf-8')
1.173 dwinter 3592: #print type(str)
1.162 dwinter 3593: retStr=regexpPage.search(str)
1.174 dwinter 3594: try: # hack warum fehtl manchmal page??
3595: return retStr.group(1)
3596: except:
3597: return str
1.110 dwinter 3598: return ""
1.14 dwinter 3599:
3600: def checkRef(self,ref):
1.175 dwinter 3601: if ref[0:3]=='lit':
3602: if len(self.library_data({ 'id':ref}))>0:
3603: return 1
1.176 dwinter 3604: try:
3605: if ref[0:7]=="tec_cat":
3606: return 1
3607: except:
3608: """nothing"""
1.175 dwinter 3609:
3610: dbs={'vl_technology':'','vl_people':'','vl_sites':''}
3611: res=None
3612: for db in dbs.keys():
3613: res=res or self.search(var=str("select reference from %s where reference =\'%s\' %s"%(db,ref,dbs[db])))
3614: return res
1.14 dwinter 3615:
3616: #Ende Methode fuer vlp
3617:
1.13 dwinter 3618: def PgQuoteString(self,string):
3619: """Quote string"""
1.91 dwinter 3620:
1.13 dwinter 3621: return libpq.PgQuoteString(string)
1.1 casties 3622:
3623: def getPartners(self):
3624: """Get list of Partners. Presently only from a subfolder partners"""
1.26 dwinter 3625:
3626: return [ item[1] for item in self.partners.ZopeFind(self.partners,obj_metatypes=['ECHO_partner'])]
1.157 jdamerow 3627:
3628:
3629: def getInstitutions(self):
3630: """Get list of Partners. Presently only from a subfolder partners"""
3631:
3632: return [ item[1] for item in self.institutions.ZopeFind(self.institutions,obj_metatypes=['ECHO_institution'])]
1.1 casties 3633:
1.157 jdamerow 3634:
1.26 dwinter 3635: def getPartnersXML(self):
3636: """partner liste als xml"""
3637: partners=self.getPartners()
1.60 dwinter 3638: ret="""<?xml version="1.0" encoding="utf-8" ?>
3639: <partners>"""
3640:
3641: for partner in partners:
1.172 dwinter 3642: ret+="""<partner id="%s" title="%s"/>\n"""%(partner.getId(),partner.title)
1.26 dwinter 3643:
3644: return ret+"\n</partners>"
1.24 dwinter 3645:
1.1 casties 3646: def getCollectionTree(self):
3647: """get the collection tree (list of triples (parent,child, depth)"""
3648:
3649: def getCollection(object,depth=0):
3650: depth+=1
3651: collections=[]
3652: for entry in object.__dict__.keys():
3653: element=getattr(object,entry)
3654: try:
3655: if element.meta_type=="ECHO_collection":
3656: collections.append((object,element,depth))
3657: collections+=getCollection(element,depth)
3658: except:
3659: """nothing"""
3660: return collections
3661:
3662:
3663: return getCollection(self)
3664:
3665: def getCollectionTreeIds(self):
3666: """Show the IDs of the Tree"""
3667: ret=[]
3668: for collection in self.getCollectionTree():
3669: ret.append((collection[0].getId(),collection[1].getId(),collection[2]))
3670: return ret
3671:
1.82 dwinter 3672: def getResourcesHTML(self,viewerType=None,filter=None):
3673: """gebe all ressourcen aus"""
1.81 dwinter 3674:
1.82 dwinter 3675: def sortHTML(x,y):
3676: return cmp(x[1].title,y[1].title)
3677:
3678: ret="""<html><body><h2>Resources in ECHO</h3>"""
3679:
3680: resources = self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1)
3681: ret+="""<h3>Found %i resources</h3>"""%len(resources)
3682: resources.sort(sortHTML)
3683: for resource in resources:
3684: echo_url=resource[1].absolute_url()
3685:
3686: if hasattr(resource[1],'title'):
3687: title=resource[1].title
3688: else:
3689: title="None"
3690: if filter:
3691: if re.search(filter,title):
3692: ret+="""\n<p><a href="%s">%s</a></p>"""%(echo_url,title)
3693: else:
3694: ret+="""\n<p><a href="%s">%s</a></p>"""%(echo_url,title)
3695:
3696: ret +="""\n</body></html>"""
3697:
3698: #self.REQUEST.RESPONSE.setHeader("Content-Type", "text/html")
3699: #self.REQUEST.RESPONSE.write(ret)
3700: return ret
3701:
1.81 dwinter 3702: def getResourcesXML(self,viewerType=None,filter=None):
3703: """gebe all ressourcen aus"""
3704: ret="""<?xml version="1.0" ?>
3705: <index>"""
3706: for resource in self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1):
3707:
3708: echo_url=resource[1].absolute_url()
3709: if hasattr(resource[1],'link'):
3710: viewer_url=resource[1].link
3711: else:
3712: viewer_url="NO URL"
3713: if filter:
3714: if re.search(filter,viewer_url):
3715: ret+="""\n<resource echoLink="%s" viewerLink="%s"/>"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(viewer_url,safe='/:?'))
3716: else:
3717: ret+="""\n<resource echoLink="%s" viewerLink="%s"/>"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(viewer_url,safe='/:?'))
3718: ret +="""\n</index>"""
3719:
3720: self.REQUEST.RESPONSE.setHeader("Content-Type", "text/xml")
3721: self.REQUEST.RESPONSE.write(ret)
1.83 dwinter 3722:
3723: def getFullTextsXML(self,viewerType=None,filter=None):
3724: """gebe all ressourcen aus"""
3725: ret="""<?xml version="1.0" ?>
3726: <index>"""
3727: for resource in self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1):
3728:
3729: echo_url=resource[1].absolute_url()
3730: if resource[1].getFullTextXML(noredirect="yes"):
3731: if hasattr(resource[1],'link'):
3732: viewer_url=echo_url+"/getFullTextXML"
3733: else:
3734: viewer_url="NO URL"
3735: if filter:
3736: if re.search(filter,viewer_url):
3737: ret+="""\n<resource echoLink="%s" viewerLink="%s"/>"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(viewer_url,safe='/:?'))
3738: else:
3739: ret+="""\n<resource echoLink="%s" viewerLink="%s"/>"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(viewer_url,safe='/:?'))
3740: ret +="""\n</index>"""
1.90 dwinter 3741:
1.81 dwinter 3742:
1.83 dwinter 3743: self.REQUEST.RESPONSE.setHeader("Content-Type", "text/xml")
3744: self.REQUEST.RESPONSE.write(ret)
1.108 dwinter 3745:
3746:
1.109 dwinter 3747: def getMetaDatasXML(self,viewerType=None,filter=None):
1.108 dwinter 3748: """gebe all ressourcen aus"""
1.170 casties 3749: # check if the request's host part was OK
3750: http_host = self.REQUEST['HTTP_HOST']
3751: host_port = self.REQUEST['SERVER_PORT']
3752: fix_host = None
3753: if http_host and http_host.rfind(host_port) == -1:
3754: print "HTTP_HOST needs fixing!"
3755: fix_host = http_host + ":" + host_port
3756:
1.108 dwinter 3757: ret="""<?xml version="1.0" ?>
3758: <index>"""
3759: for resource in self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1):
3760:
3761: echo_url=resource[1].absolute_url()
1.170 casties 3762: if fix_host:
3763: #print "replacing ", http_host, " by ", fix_host
3764: echo_url = string.replace(echo_url, http_host, fix_host, 1)
1.136 casties 3765:
3766: if hasattr(resource[1],'link'):
3767: meta_url=echo_url+"/getMetaDataXML"
3768: else:
3769: meta_url="NO_URL"
3770:
3771: if filter and not re.search(filter,viewer_url):
3772: continue
3773:
1.153 dwinter 3774: #modificationDate=time.strptime(str(resource[1].bobobase_modification_time()),"%Y/%m/%d %H:%M:%S %Z")
3775:
3776: modificationDate=resource[1].bobobase_modification_time().strftime("%Y/%m/%d %H:%M:%S")
3777:
3778: ret+="""\n<resource resourceLink="%s" metaLink="%s" modificationDate="%s"/>"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(meta_url,safe='/:?'),modificationDate)
3779:
1.136 casties 3780:
1.108 dwinter 3781: ret +="""\n</index>"""
1.170 casties 3782:
1.108 dwinter 3783: self.REQUEST.RESPONSE.setHeader("Content-Type", "text/xml")
3784: self.REQUEST.RESPONSE.write(ret)
3785:
1.106 jdamerow 3786:
3787: def findPartners(self):
3788: """find all partners in partners"""
1.107 jdamerow 3789: par=self.ZopeFind(self.partners, obj_metatypes='ECHO_partner')
1.106 jdamerow 3790: return par
1.114 jdamerow 3791:
3792: def getPartnerFromID(self):
3793: """find partner form ID return object"""
1.115 jdamerow 3794: pa=self.REQUEST['partner']
1.116 jdamerow 3795: par=self.ZopeFind(self.partners, obj_ids=[pa])
1.114 jdamerow 3796: return par
1.117 jdamerow 3797:
3798: def getPartnerFromIDParameter(self, id):
3799: """ find partners from ID"""
3800: par=self.ZopeFind(self.partners, obj_ids=[id])
3801: return par
1.157 jdamerow 3802:
3803: def getInstitutionFromID(self,id):
3804: """ find institution from id """
3805: inst=self.ZopeFind(self.institutions, obj_ids=[id])
3806: return inst
1.108 dwinter 3807:
1.1 casties 3808:
1.13 dwinter 3809: def manage_addECHO_root(self,id,title,RESPONSE=None):
1.1 casties 3810: """Add an ECHO_root"""
3811: self._setObject(id,ECHO_root(id,title))
3812:
3813: if RESPONSE is not None:
3814: RESPONSE.redirect('manage_main')
3815:
1.13 dwinter 3816: def manage_addECHO_rootForm(self):
1.1 casties 3817: """Nothing yet"""
1.13 dwinter 3818: pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_root.zpt').__of__(self)
1.1 casties 3819: return pt()
1.93 dwinter 3820:
3821: class ECHO_copyrightType(Folder):
3822: """copyright typ"""
3823:
3824: meta_type="ECHO_copyrightType"
3825:
1.119 jdamerow 3826: def __init__(self,id,title,label,url):
1.93 dwinter 3827: """init"""
3828: self.id=id
3829: self.title=title
3830: self.label=label
1.119 jdamerow 3831: self.url=url
1.93 dwinter 3832:
3833: manage_options = Folder.manage_options+(
3834: {'label':'Main Config','action':'ECHO_copyrightType_config_mainForm'},
3835: )
3836:
3837: def ECHO_copyrightType_config_mainForm(self):
3838: """change form"""
3839: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_copyrightType').__of__(self)
3840: pt.content_type="text/html"
3841: return pt()
3842:
1.119 jdamerow 3843: def ECHO_copyrightType_config_main(self,title,label,url,RESPONSE=None):
1.93 dwinter 3844: """change"""
3845: self.title=title
3846: self.label=label
1.119 jdamerow 3847: self.url=url
1.93 dwinter 3848:
3849: if RESPONSE is not None:
3850: RESPONSE.redirect('manage_main')
3851:
3852: def manage_addECHO_copyrightTypeForm(self):
3853: """Form for adding a ressource"""
3854: pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_copyrightTypeForm.zpt').__of__(self)
3855: return pt()
3856:
3857:
1.119 jdamerow 3858: def manage_addECHO_copyrightType(self,id,title,label,url,RESPONSE=None):
1.93 dwinter 3859: """addaresource"""
3860:
1.119 jdamerow 3861: newObj=ECHO_copyrightType(id,title,label,url)
1.93 dwinter 3862:
3863: self._setObject(id,newObj)
3864:
3865: if RESPONSE is not None:
3866: RESPONSE.redirect('manage_main')
3867:
3868:
1.1 casties 3869:
3870: class ECHO_partner(Image,Persistent):
3871: """ECHO Partner"""
3872:
3873: meta_type="ECHO_partner"
3874:
1.131 jdamerow 3875: def __init__(self, id, title,url, file, copyrightType, person, email, country, color, content_type='', precondition=''):
1.1 casties 3876: self.__name__=id
3877: self.title=title
3878: self.url=url
1.99 jdamerow 3879: self.person=person
3880: self.email=email
3881: self.country=country
1.131 jdamerow 3882: self.color=color
1.1 casties 3883: self.precondition=precondition
1.101 jdamerow 3884: self.copyrightType=copyrightType
1.1 casties 3885: data, size = self._read_data(file)
1.29 dwinter 3886: content_type=self._get_content_type(file, data, id, content_type)
3887: self.update_data(data, content_type, size)
1.1 casties 3888:
3889: manage_options = Image.manage_options+(
3890: {'label':'Partner Information','action':'ECHO_partner_config'},
3891: )
3892:
1.98 dwinter 3893:
1.131 jdamerow 3894: def changeECHO_partner(self,url,copyrightType,person, email, country, color, RESPONSE=None):
1.1 casties 3895: """Change main information"""
3896: self.url=url
1.99 jdamerow 3897: self.person=person
3898: self.email=email
3899: self.country=country
1.131 jdamerow 3900: self.color=color
1.100 jdamerow 3901: self.copyrightType=copyrightType
1.1 casties 3902: if RESPONSE is not None:
3903: RESPONSE.redirect('manage_main')
3904:
3905:
3906:
3907: def ECHO_partner_config(self):
3908: """Main configuration"""
3909: if not hasattr(self,'url'):
3910: self.url=""
1.13 dwinter 3911: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_partner.zpt').__of__(self)
1.1 casties 3912: return pt()
3913:
3914:
1.13 dwinter 3915: manage_addECHO_partnerForm=DTMLFile('dtml/ECHO_partnerAdd',globals(),
1.1 casties 3916: Kind='ECHO_partner',kind='ECHO_partner')
3917:
3918:
3919:
1.131 jdamerow 3920: def manage_addECHO_partner(self, id, url, person, email, country, color, file=None, copyrightType='', title='', precondition='', content_type='',
1.1 casties 3921: REQUEST=None):
3922: """
3923: Add a new ECHO_partner object.
3924:
3925: Creates a new ECHO_partner object 'id' with the contents of 'file'.
3926: Based on Image.manage_addImage
3927: """
3928:
3929: id=str(id)
3930: title=str(title)
1.29 dwinter 3931: content_type=str(content_type)
1.1 casties 3932: precondition=str(precondition)
3933:
3934: id, title = OFS.Image.cookId(id, title, file)
3935:
3936: self=self.this()
3937:
3938: # First, we create the image without data:
1.131 jdamerow 3939: self._setObject(id, ECHO_partner(id,title,url,'',copyrightType, person, email, country, color, content_type, precondition))
1.1 casties 3940:
3941: # Now we "upload" the data. By doing this in two steps, we
3942: # can use a database trick to make the upload more efficient.
3943: if file:
3944: self._getOb(id).manage_upload(file)
1.29 dwinter 3945: if content_type:
3946: self._getOb(id).content_type=content_type
1.1 casties 3947:
3948: if REQUEST is not None:
3949: try: url=self.DestinationURL()
3950: except: url=REQUEST['URL1']
3951: REQUEST.RESPONSE.redirect('%s/manage_main' % url)
3952: return id
3953:
1.157 jdamerow 3954: class ECHO_linkList(ZopePageTemplate):
3955: """LinkList Objekt"""
3956: meta_type="ECHO_linkList"
3957:
3958: _default_content_fn = os.path.join(package_home(globals()), 'html/ECHO_pageTemplateDefault.html')
3959:
3960: manage_options = ZopePageTemplate.manage_options+(
3961: {'label':'Main Config','action':'changeECHO_linkListWeightForm'},
3962: )
3963:
3964: def content_html(self):
3965: """content_html"""
3966: return content_html(self,'pageTemplate')
3967:
3968: def changeECHO_linkListWeightForm(self):
3969: """change"""
3970: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_linkListTemplate.zpt').__of__(self)
3971: return pt()
3972:
3973: def changeECHO_linkListWeight(self,contentType,label,RESPONSE=None):
3974: """change"""
3975: self.contentType=contentType
3976: self.label=label
3977:
3978: if RESPONSE is not None:
3979: RESPONSE.redirect('manage_main')
3980:
3981: def getLabel(self):
3982: if hasattr(self,'label'):
3983: return self.label.encode('utf-8')
3984: else:
3985: return 0
3986:
3987: def getcontentType(self):
3988: """get contentType"""
3989: if hasattr(self,'contentType'):
3990: return self.contentType
3991: else:
3992: return 0
3993:
3994: def __init__(self, id, label, title=None, text=None, contentType=None):
3995: self.id = str(id)
3996: self.title=title
3997: self.label=label
3998: self.ZBindings_edit(self._default_bindings)
3999: if text is None:
4000: text = ''
4001: self.pt_edit(text, contentType)
4002:
4003:
4004:
4005:
4006: def manage_addECHO_linkListForm(self):
4007: """Form for adding"""
4008: pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_linkListTemplate.zpt').__of__(self)
4009: return pt()
4010:
4011: from urllib import quote
4012:
4013:
4014: def manage_addECHO_linkList(self, id, label,contentType=0,title=None, text=None,
4015: REQUEST=None, submit=None):
4016: """Add a LinkList with optional file content."""
4017:
4018: id = str(id)
4019: if REQUEST is None:
4020: self._setObject(id, ECHO_linkList(id, label, text))
4021: ob = getattr(self, id)
4022: setattr(ob,'contentType',contentType)
4023: if title:
4024: ob.pt_setTitle(title)
4025: return ob
4026: else:
4027: file = REQUEST.form.get('file')
4028: headers = getattr(file, 'headers', None)
4029: if (headers is None) or (not file.filename):
4030: zpt = ECHO_linkList(id, file)
4031: else:
4032: zpt = ECHO_linkList(id, label,'', file, headers.get('contentType'))
4033:
4034: self._setObject(id, zpt)
4035: ob = getattr(self, id)
4036: if title:
4037: ob.pt_setTitle(title)
4038:
4039: try:
4040: u = self.DestinationURL()
4041: except AttributeError:
4042: u = REQUEST['URL1']
4043:
4044: if submit == " Add and Edit ":
4045: u = "%s/%s" % (u, quote(id))
4046: REQUEST.RESPONSE.redirect(u+'/manage_main')
4047: return ''
4048:
4049:
4050: class ECHO_support(Folder):
1.160 dwinter 4051: """gefÂrdert durch"""
1.157 jdamerow 4052: meta_type="ECHO_support"
4053:
4054:
4055:
4056: def __init__(self,id,institutions=None):
4057: """init"""
4058: self.id=id
1.159 jdamerow 4059: self.title=''
1.157 jdamerow 4060: self.institutions=toList(institutions)
4061:
4062: def getSupporter(self):
4063: """return institutions"""
4064: if self.institutions:
4065: return self.institutions
4066: else:
4067: return []
4068:
4069: manage_options = Folder.manage_options+(
4070: {'label':'Main Config','action':'ECHO_support_configForm'},
4071: )
4072:
4073: def ECHO_support_configForm(self):
4074: """change form"""
4075: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_support').__of__(self)
4076: pt.content_type="text/html"
4077: return pt()
4078:
4079: def ECHO_support_config(self,institutions=None,RESPONSE=None):
4080: """change"""
4081: self.institutions=toList(institutions)
4082:
4083: if RESPONSE is not None:
4084: RESPONSE.redirect('manage_main')
4085:
4086:
4087: def manage_addECHO_supportForm(self):
4088: """Form for adding"""
4089: pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_support.zpt').__of__(self)
4090: return pt()
4091:
1.159 jdamerow 4092: def manage_addECHO_support(self, id,institutions=None,RESPONSE=None):
1.157 jdamerow 4093: """add the copyright"""
4094:
4095: meta_type="ECHO_support"
4096:
4097:
4098: self._setObject(id, ECHO_support(id,institutions))
4099:
4100: if RESPONSE is not None:
4101: RESPONSE.redirect('manage_main')
4102:
4103:
4104: class ECHO_institution(Image,Persistent):
4105: """ECHO Institution"""
4106:
4107: meta_type="ECHO_institution"
4108:
4109: def __init__(self, id, title,url, file, person, email, country, content_type='', precondition=''):
4110: self.__name__=id
4111: self.title=title
4112: self.url=url
4113: self.person=person
4114: self.email=email
4115: self.country=country
4116: self.precondition=precondition
4117: data, size = self._read_data(file)
4118: content_type=self._get_content_type(file, data, id, content_type)
4119: self.update_data(data, content_type, size)
4120:
4121: manage_options = Image.manage_options+(
4122: {'label':'Institution Information','action':'ECHO_institution_config'},
4123: )
4124:
4125:
4126: def changeECHO_institution(self,url,person, email, country,RESPONSE=None):
4127: """Change main information"""
4128: self.url=url
4129: self.person=person
4130: self.email=email
4131: self.country=country
4132: if RESPONSE is not None:
4133: RESPONSE.redirect('manage_main')
4134:
4135:
4136:
4137: def ECHO_institution_config(self):
4138: """Main configuration"""
4139: if not hasattr(self,'url'):
4140: self.url=""
4141: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_institution.zpt').__of__(self)
4142: return pt()
4143:
4144:
4145: manage_addECHO_institutionForm=DTMLFile('dtml/ECHO_institutionAdd',globals(),
4146: Kind='ECHO_institution',kind='ECHO_institution')
4147:
4148:
1.1 casties 4149:
1.157 jdamerow 4150: def manage_addECHO_institution(self, id, url, person, email, country, file=None, title='', precondition='', content_type='',
4151: REQUEST=None):
4152: """
4153: Add a new ECHO_institution object.
4154:
4155: Creates a new ECHO_institution object 'id' with the contents of 'file'.
4156: Based on Image.manage_addImage
4157: """
4158:
4159: id=str(id)
4160: title=str(title)
4161: content_type=str(content_type)
4162: precondition=str(precondition)
4163:
4164: id, title = OFS.Image.cookId(id, title, file)
4165:
4166: self=self.this()
4167:
4168: # First, we create the image without data:
4169: self._setObject(id, ECHO_institution(id,title,url,'', person, email, country, content_type, precondition))
4170:
4171: # Now we "upload" the data. By doing this in two steps, we
4172: # can use a database trick to make the upload more efficient.
4173: if file:
4174: self._getOb(id).manage_upload(file)
4175: if content_type:
4176: self._getOb(id).content_type=content_type
4177:
4178: if REQUEST is not None:
4179: try: url=self.DestinationURL()
4180: except: url=REQUEST['URL1']
4181: REQUEST.RESPONSE.redirect('%s/manage_main' % url)
1.160 dwinter 4182: return id
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>