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