Annotation of ECHO_content/ECHO_collection.py, revision 1.166
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):
1.166 ! dwinter 3046: print "getTablet"
! 3047: read=urllib.urlopen("http://enlil.museum.upenn.edu/cgi-bin/cdlget.plx?item=%s&project=ncdl"%item).read()
! 3048: print "gotTablet"
! 3049: read=re.sub("\[search\]","search",read)
! 3050: print "reggotTablet"
! 3051: return read[read.find("<body>")+6:read.rfind("</body>")]
1.165 dwinter 3052:
3053: def generateFromRDF2(self):
3054: """generate from RDF2"""
3055: global seqs
3056: seqs={}
3057: global descrs
3058: descrs={}
3059: global key
3060: key=""
3061: global value
3062: value=""
3063: def start_element(name,attrs):
3064:
3065: global seqs
3066: global descrs
3067: global key
3068: global value
3069: seq=""
3070: if name=="RDF:Seq":
3071: key=attrs.get('RDF:about')
3072: try: # teste ob liste
3073: x=seqs[key][0]
3074: except:
3075:
3076: seqs[key]=[]
3077:
3078:
3079: elif name=="RDF:Description":
3080: key=attrs.get('RDF:about')
3081:
3082:
3083: elif name=="RDF:li":
3084: name=attrs.get('RDF:resource')
3085: seqs[key].append(name)
3086:
3087: elif name=="ECHONAVIGATION:type":
3088: value="type"
3089:
3090: elif name=="ECHONAVIGATION:name":
3091: value="name"
3092: elif name=="ECHONAVIGATION:linkClickable":
3093: value="linkClickable"
3094:
3095: def end_element(name):
3096: """nothing"""
3097: key=""
3098: value=""
3099:
3100: def char_data(data):
3101: """nothing"""
3102:
3103: data=re.sub("\n","",data)
3104: try:
3105: if descrs[key].has_key(value):
3106: descrs[key][value]+=data
3107: else:
3108: descrs[key][value]=data
3109: except:
3110:
3111: descrs[key]={}
3112: descrs[key][value]=data
3113:
3114: p = xml.parsers.expat.ParserCreate()
3115:
3116: p.StartElementHandler = start_element
3117: p.EndElementHandler = end_element
3118: p.CharacterDataHandler = char_data
3119: fileName="/Users/dwinter/Documents/Projekte/CDLI/test11.rdf"
3120:
3121: p.ParseFile(file(fileName))
3122: self.REQUEST.RESPONSE.write("<html><body><h1>Start</h1>")
3123: createSubs2(self,seqs,descrs,"/Cuneiform Corpus")
3124: self.REQUEST.RESPONSE.write("<h1>done</h1></body></html>")
3125: print "done"
3126:
3127:
3128: return "done"
3129:
3130: def generateFromRDF(self):
3131: """generate Structure from rdf"""
3132: dom=xml.dom.minidom.parse("/Users/dwinter/Documents/Projekte/CDLI/test10.rdf")
3133: seqs={}
3134: descrs={}
3135: for seq in dom.getElementsByTagName("RDF:Seq"):
3136: key=seq.getAttribute('RDF:about')
3137: try:
3138: seqs[key].append(seq)
3139: except:
3140: seqs[key]=[seq]
3141:
3142:
3143: for descr in dom.getElementsByTagName("RDF:Description"):
3144: key=descr.getAttribute('RDF:about')
3145: try:
3146: descrs[key].append(descr)
3147: except:
3148: descrs[key]=[descr]
3149: createSubs(self,seqs,descrs,"echo:collectionroot")
3150:
3151:
3152:
1.163 dwinter 3153: def changeWeightsInCollection(self):
3154: """change all lables of a collection"""
3155: ret=""
3156: argv=self.REQUEST.form
3157:
3158: resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource','ECHO_collection','ECHO_link','ECHO_externalLink'])
3159: for resource in resources:
3160:
3161: try:
3162: ret+=resource[1].getId()+" "+argv[resource[1].getId()]+"</br>"
3163: resource[1].weight=argv[resource[1].getId()][0:]
3164: except:
3165: """not"""
3166: return ret
1.153 dwinter 3167:
1.163 dwinter 3168: def changeWeights(self):
3169: """change form"""
3170: pt=PageTemplateFile('Products/ECHO_content/zpt/changeWeightForm').__of__(self)
3171: pt.content_type="text/html"
3172: return pt()
3173: getSubCols = ECHO_helpers.getSubCols
1.153 dwinter 3174:
3175: manage_options=Folder.manage_options+(
3176: {'label':'Main Config','action':'ECHO_copyright_configForm'},
3177: {'label':'Reload Metadata','action':'reloadMetaDataFromStorageWarning'},
1.163 dwinter 3178: {'label':'Change Weights','action':'changeWeights'},
1.153 dwinter 3179: )
3180:
1.141 dwinter 3181:
3182: def showRDF(self):
3183: """showrdf"""
3184: self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
1.145 dwinter 3185: 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 3186: ret+=self.getRDF(urn="echo:collectionroot")+"\n"
3187:
1.141 dwinter 3188: ret+="""</RDF:RDF>"""
3189: return ret
3190:
1.153 dwinter 3191:
3192: def reloadMetaDataFromStorageWarning(self,RESPONSE=None):
3193: """warning"""
3194: pt=PageTemplateFile('Products/ECHO_content/zpt/reloadMetaDataFromStorageWarning.zpt').__of__(self)
3195: pt.content_type="text/html"
3196: return pt()
3197:
3198: def reloadMetaDataFromStorage(self,RESPONSE=None):
3199: """reload MD from Storage"""
3200:
3201: return reloadMetaDataFromStorage(self,RESPONSE)
3202:
1.143 dwinter 3203: def getRDF(self,urn=None):
1.141 dwinter 3204: """rdf of the collection"""
1.143 dwinter 3205:
1.141 dwinter 3206: contents=self.ZopeFind(self,obj_metatypes=['ECHO_group','ECHO_resource','ECHO_collection'])
3207:
1.143 dwinter 3208: ret=getRDFDescription(self,self.absolute_url(),urn=urn)
1.141 dwinter 3209:
1.148 dwinter 3210: li="""<RDF:li RDF:resource="%s" />\n"""
1.141 dwinter 3211:
3212:
3213: for content in contents:
3214: ret+=content[1].getRDF()+"\n"
3215:
1.148 dwinter 3216: ret+="""<RDF:Seq RDF:about="%s">\n"""%urn
1.141 dwinter 3217: for content in contents:
1.148 dwinter 3218: nurn=content[1].absolute_url()
1.141 dwinter 3219: ret+=li%nurn
3220: return ret+"</RDF:Seq>"
3221:
1.90 dwinter 3222:
1.130 dwinter 3223: def showContent(self,path):
3224: """return content/html"""
3225:
1.163 dwinter 3226: return ECHO_helpers.urlopen(path+"/content_html").read()
1.130 dwinter 3227:
3228: def getImageViewers(self):
3229: """images"""
3230: viewers=self.ZopeFind(self.standardImageViewer,obj_metatypes=['OSAS_ViewerObject'])
3231: return viewers
3232:
1.90 dwinter 3233:
3234: def getBibTag(self,tag,content):
1.160 dwinter 3235: """get field tag fĂźr index-meta-generation"""
1.90 dwinter 3236: if not content or content=="":
3237: return ""
3238: ret="<%s>"%tag
1.95 dwinter 3239: #ret+=urllib.quote(content)
3240: ret+=content
3241:
1.90 dwinter 3242: ret+="</%s>"%tag
3243: return ret
3244:
3245: def getValueFromClass(self,field,found):
3246: """retattribute falss existing"""
3247: try:
1.95 dwinter 3248:
3249: return getattr(found,field).decode('ascii','ignore')
1.90 dwinter 3250: except:
3251: return ""
1.49 dwinter 3252:
3253: def getImageTag(self):
3254: """needed by main_template"""
3255: return ""
3256: secondaryLink="" #needed by main_template
3257: secondaryLinkTitle="" #needed by main_template
3258:
1.35 dwinter 3259: def getBgcolour(self):
3260: """hack"""
3261: return "#dddddd"
1.28 dwinter 3262:
3263: def contentTypeSelector_HTML(self,selected=None):
3264: """give type selector"""
3265: if not selected:
3266: retStr="<option selected>\n"
3267: else:
3268: retStr="<option>\n"
3269:
1.62 dwinter 3270: try: # erste version contentTypes exists
1.73 dwinter 3271: for contentType in self.ZopeFind(self.contentTypes,obj_metatypes=["ECHO_contentType","OSAS_MetadataMapping"]):
1.28 dwinter 3272: if selected and (contentType[0]==selected):
3273: retStr+="""<option selected value="%s">%s\n"""%(contentType[0],contentType[0])
3274: else:
3275: retStr+="""<option value="%s">%s\n"""%(contentType[0],contentType[0])
3276: except:
1.62 dwinter 3277: try:
3278: for contentType in self.ZopeFind(self.standardMD,obj_metatypes=["OSAS_MetadataMapping"]):
3279: if selected and (contentType[0]==selected):
3280: retStr+="""<option selected value="%s">%s\n"""%(contentType[0],contentType[0])
3281: else:
3282: retStr+="""<option value="%s">%s\n"""%(contentType[0],contentType[0])
3283: except:
3284: """nothing"""
3285:
1.73 dwinter 3286: return retStr
3287:
3288: def renderingTypeSelector_HTML(self,selected=None):
3289: """give type selector"""
3290: if not selected:
3291: retStr="<option selected>\n"
3292: else:
3293: retStr="<option>\n"
3294:
3295: try: # erste version renderingTypes exists
3296: for renderingType in self.ZopeFind(self.renderingTypes,obj_metatypes=["ECHO_renderingType"]):
3297: if selected and (renderingType[0]==selected):
3298: retStr+="""<option selected value="%s">%s\n"""%(renderingType[0],renderingType[0])
3299: else:
3300: retStr+="""<option value="%s">%s\n"""%(renderingType[0],renderingType[0])
3301: except:
3302: """nothing"""
3303: return retStr
3304:
3305: def renderingTypeSelector_HTML(self,selected=None):
3306: """give type selector"""
3307: if not selected:
3308: retStr="<option selected>\n"
3309: else:
3310: retStr="<option>\n"
3311:
3312: try: # erste version renderingTypes exists
3313: for renderingType in self.ZopeFind(self.renderingTypes,obj_metatypes=["ECHO_renderingType"]):
3314: if selected and (renderingType[0]==selected):
3315: retStr+="""<option selected value="%s">%s\n"""%(renderingType[0],renderingType[0])
3316: else:
3317: retStr+="""<option value="%s">%s\n"""%(renderingType[0],renderingType[0])
3318: except:
3319: """nothing"""
3320: return retStr
3321:
3322:
1.151 jdamerow 3323: def copyrightTypeSelector_HTML(self, object=None, selected=None,first=None):
1.73 dwinter 3324: """give type selector"""
1.104 dwinter 3325:
3326: if not first:
3327: if not selected:
3328: retStr="<option selected>\n"
3329: else:
3330: retStr="<option>\n"
1.73 dwinter 3331: else:
1.104 dwinter 3332: if not selected:
3333: retStr="""<option selected value="%s">%s\n"""%first
3334: else:
3335: retStr="""<option value="%s">%s\n"""%first
1.98 dwinter 3336:
3337:
3338: try: # erste version copyrightTypes exists
3339: for copyrightType in self.ZopeFind(self.copyrightTypes,obj_metatypes=["ECHO_copyrightType"]):
3340: if selected and (copyrightType[0]==selected):
3341: retStr+="""<option selected value="%s">%s\n"""%(copyrightType[0],copyrightType[0])
3342: else:
3343: retStr+="""<option value="%s">%s\n"""%(copyrightType[0],copyrightType[0])
1.151 jdamerow 3344:
3345: for copyrightTypeSelf in self.ZopeFind(object,obj_metatypes=["ECHO_copyrightType"],search_sub=1):
1.152 jdamerow 3346: if selected and (copyrightTypeSelf[0]==selected):
3347: retStr+="""<option selected value="%s">%s\n"""%(copyrightTypeSelf[0],copyrightTypeSelf[0])
3348: else:
1.151 jdamerow 3349: retStr+="""<option value="%s">%s\n"""%(copyrightTypeSelf[0],copyrightTypeSelf[0])
3350:
1.98 dwinter 3351: except:
1.151 jdamerow 3352: """nothing"""
3353:
1.98 dwinter 3354: return retStr
3355:
3356: def partnerSelector_HTML(self,selected=None):
3357: """give type selector"""
3358: if not selected:
3359: retStr="<option selected>\n"
3360: else:
3361: retStr="<option>\n"
1.73 dwinter 3362:
3363: try: # erste version copyrightTypes exists
1.98 dwinter 3364: for copyrightType in self.ZopeFind(self.partners,obj_metatypes=["ECHO_partner"]):
1.73 dwinter 3365: if selected and (copyrightType[0]==selected):
3366: retStr+="""<option selected value="%s">%s\n"""%(copyrightType[0],copyrightType[0])
3367: else:
3368: retStr+="""<option value="%s">%s\n"""%(copyrightType[0],copyrightType[0])
3369: except:
3370: """nothing"""
3371: return retStr
1.98 dwinter 3372:
1.160 dwinter 3373: mediaTypes=['all','text','images','sound','video'] # konfigurierbar in neuer version Ăźber echoroot??
1.98 dwinter 3374:
3375: def mediaTypeSelector_HTML(self,selected=None):
3376: """give type selector"""
3377: if not selected:
3378: retStr="<option selected>\n"
3379: else:
3380: retStr="<option>\n"
3381:
3382: try: # erste version mediatypesTypes exists
3383: for mediaType in self.mediaTypes:
3384: if selected and (mediaType in selected):
3385: retStr+="""<option selected value="%s">%s\n"""%(mediaType,mediaType)
3386: else:
3387: retStr+="""<option value="%s">%s\n"""%(mediaType,mediaType)
3388: except:
3389: """nothing"""
3390: return retStr
1.73 dwinter 3391:
1.28 dwinter 3392:
1.27 dwinter 3393: def patchContentType(self,obj=None):
3394: """austauschen content_type with contentType (patch bei umstieg von alter Version)"""
3395:
3396:
3397: if not obj:
3398: obj = self
3399:
1.30 dwinter 3400: entries=obj.ZopeFind(obj,obj_metatypes=['ECHO_resource','ECHO_collection','ECHO_externalLink','ECHO_pageTemplate'])
1.27 dwinter 3401:
3402: for entry in entries:
1.31 dwinter 3403: setattr(entry[1],'contentType',entry[1].content_type)
3404: #entry[1].contentType == entry[1].content_type
1.27 dwinter 3405:
3406: if entry[1].meta_type == 'ECHO_collection':
3407: entry[1].patchContentType(entry[1])
1.19 dwinter 3408:
1.27 dwinter 3409:
1.49 dwinter 3410: return "changed all contenttypes in: "+self.title
1.63 dwinter 3411:
3412:
3413: def patchViewClassification(self,obj=None):
3414: """setze viewClassification heuristisch"""
3415:
3416: def checkIfArrow(obj):
3417: if hasattr(obj,'coords'):
3418: for coordtemp in obj.coords:
1.91 dwinter 3419:
1.64 dwinter 3420: if (len(coordtemp)>4) and not (coordtemp[4]==''):
1.63 dwinter 3421: return 4
3422: return None
3423: return None
3424:
3425: if not obj:
3426: obj = self
3427:
3428: entries=obj.ZopeFind(obj,obj_metatypes=['ECHO_resource','ECHO_collection','ECHO_group'])
3429:
3430: for entry in entries:
3431:
1.64 dwinter 3432: if checkIfArrow(entry[1]):
1.63 dwinter 3433: setattr(entry[1],'viewClassification','view point')
3434: else:
3435: setattr(entry[1],'viewClassification','area')
3436:
3437: #entry[1].contentType == entry[1].content_type
3438:
3439: if entry[1].meta_type in ['ECHO_collection','ECHO_group']:
3440: entry[1].patchViewClassification(entry[1])
3441:
3442:
3443: return "changed all contenttypes in: "+self.title
1.166 ! dwinter 3444:
! 3445:
! 3446: def setCache(self,obj=None,RESPONSE=None):
! 3447: """setze alle collections auf cache = CacheManager"""
! 3448:
! 3449:
! 3450: if not obj:
! 3451: obj = self
! 3452:
! 3453: entries=obj.ZopeFind(obj,obj_metatypes=['ECHO_collection'],search_sub=1)
1.63 dwinter 3454:
1.166 ! dwinter 3455: for entry in entries:
! 3456: print entry[0]
! 3457: entry[1].ZCacheable_setManagerId('CacheManager')
! 3458:
! 3459:
! 3460: return "changed all CM in: "+self.title
! 3461:
1.19 dwinter 3462: def ECHO_newViewerLink(self,obj=None):
3463: """change links (:86 faellt weg)"""
3464:
3465: if not obj:
3466: obj = self
3467:
3468: entries=obj.ZopeFind(obj,obj_metatypes=['ECHO_resource','ECHO_collection'])
3469:
3470: for entry in entries:
3471:
3472: if entry[1].meta_type == 'ECHO_resource':
3473:
3474: entry[1].link=re.sub('\:86','',entry[1].link)
3475:
3476: else:
3477:
3478: entry[1].ECHO_newViewerLink(entry[1])
3479:
3480: return "Rerenderd all links to resources in: "+self.title
1.1 casties 3481:
3482: def __init__(self,id,title):
3483: """init"""
3484: self.id = id
3485: self.title=title
1.13 dwinter 3486:
1.14 dwinter 3487: def deleteSpace(self,str):
3488: """delete space at the end of a line"""
3489: if str[len(str)-1]==" ":
3490: return str[0:len(str)-1]
3491: else:
3492: return str
3493:
3494:
3495:
3496: # zusaetliche methoden fuer das vlp muessen in ein eigenes produkt
3497:
3498: def formatAscii(self,str,url=None):
3499: """ersetze ascii umbrueche durch <br>"""
3500: #url=None
3501: if url:
3502:
3503: retStr=""
3504: words=str.split("\n")
3505:
3506: for word in words:
3507: strUrl=url%word
1.91 dwinter 3508:
1.14 dwinter 3509: retStr+="""<a href="%s">%s</a><br/>"""%(strUrl,word)
3510: str=retStr
3511: if str:
3512: return re.sub(r"[\n]","<br/>",str)
3513: else:
3514: return ""
3515:
3516: def link2html(self,str):
3517: """link2html fuer VLP muss hier noch raus"""
3518: if str:
1.91 dwinter 3519:
1.14 dwinter 3520: str=re.sub("\&","&",str)
1.108 dwinter 3521: dom=xml.dom.minidom.parseString("<?xml version='1.0' encoding='utf-8'?><txt>"+str+"</txt>")
1.14 dwinter 3522: links=dom.getElementsByTagName("link")
3523:
1.91 dwinter 3524:
1.14 dwinter 3525: for link in links:
3526: link.tagName="a"
3527: ref=link.getAttribute("ref")
3528: if self.checkRef(ref):
3529: link.setAttribute("href",self.aq_parent.absolute_url()+"/vlp_coll?id="+ref)
3530:
1.113 dwinter 3531: newxml=dom.toxml('utf-8')
1.162 dwinter 3532:
3533: retStr=regexpTXT.search(newxml)
3534:
3535: return retStr.group(1)
3536:
1.113 dwinter 3537:
1.14 dwinter 3538: return ""
3539:
1.160 dwinter 3540: def xml2html(self,str,quote="yes"):
1.110 dwinter 3541: """link2html fuer VLP muss hier noch raus"""
1.163 dwinter 3542: print str
1.110 dwinter 3543: if str:
1.160 dwinter 3544: if quote=="yes2":
3545: str=re.sub("\&","&",str)
1.110 dwinter 3546: dom=xml.dom.minidom.parseString(str)
3547: links=dom.getElementsByTagName("link")
3548:
3549:
3550: for link in links:
3551: link.tagName="a"
3552: ref=link.getAttribute("ref")
3553: if self.checkRef(ref):
3554: link.setAttribute("href",self.aq_parent.absolute_url()+"/vlp_coll?id="+ref)
3555:
1.163 dwinter 3556: str= dom.toxml()
3557:
3558: #print link.toxml('utf-8')
1.162 dwinter 3559: retStr=regexpPage.search(str)
3560:
3561: return retStr.group(1)
1.110 dwinter 3562: return ""
1.14 dwinter 3563:
3564: def checkRef(self,ref):
3565: dbs={'vl_literature':'AND CD LIKE \'%lise%\'','vl_technology':'','vl_people':''}
3566: res=None
3567: for db in dbs.keys():
3568:
3569: res=res or self.search(var=str("select reference from %s where reference =\'%s\' %s"%(db,ref,dbs[db])))
3570: return res
3571:
3572: #Ende Methode fuer vlp
3573:
1.13 dwinter 3574: def PgQuoteString(self,string):
3575: """Quote string"""
1.91 dwinter 3576:
1.13 dwinter 3577: return libpq.PgQuoteString(string)
1.1 casties 3578:
3579: def getPartners(self):
3580: """Get list of Partners. Presently only from a subfolder partners"""
1.26 dwinter 3581:
3582: return [ item[1] for item in self.partners.ZopeFind(self.partners,obj_metatypes=['ECHO_partner'])]
1.157 jdamerow 3583:
3584:
3585: def getInstitutions(self):
3586: """Get list of Partners. Presently only from a subfolder partners"""
3587:
3588: return [ item[1] for item in self.institutions.ZopeFind(self.institutions,obj_metatypes=['ECHO_institution'])]
1.1 casties 3589:
1.157 jdamerow 3590:
1.26 dwinter 3591: def getPartnersXML(self):
3592: """partner liste als xml"""
3593: partners=self.getPartners()
1.60 dwinter 3594: ret="""<?xml version="1.0" encoding="utf-8" ?>
3595: <partners>"""
3596:
3597: for partner in partners:
3598: ret+="""<partner id="%s" title="%s"/>\n"""%(partner.getId(),unicode(partner.title,'utf-8','replace'))
1.26 dwinter 3599:
3600: return ret+"\n</partners>"
1.24 dwinter 3601:
1.1 casties 3602: def getCollectionTree(self):
3603: """get the collection tree (list of triples (parent,child, depth)"""
3604:
3605: def getCollection(object,depth=0):
3606: depth+=1
3607: collections=[]
3608: for entry in object.__dict__.keys():
3609: element=getattr(object,entry)
3610: try:
3611: if element.meta_type=="ECHO_collection":
3612: collections.append((object,element,depth))
3613: collections+=getCollection(element,depth)
3614: except:
3615: """nothing"""
3616: return collections
3617:
3618:
3619: return getCollection(self)
3620:
3621: def getCollectionTreeIds(self):
3622: """Show the IDs of the Tree"""
3623: ret=[]
3624: for collection in self.getCollectionTree():
3625: ret.append((collection[0].getId(),collection[1].getId(),collection[2]))
3626: return ret
3627:
1.82 dwinter 3628: def getResourcesHTML(self,viewerType=None,filter=None):
3629: """gebe all ressourcen aus"""
1.81 dwinter 3630:
1.82 dwinter 3631: def sortHTML(x,y):
3632: return cmp(x[1].title,y[1].title)
3633:
3634: ret="""<html><body><h2>Resources in ECHO</h3>"""
3635:
3636: resources = self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1)
3637: ret+="""<h3>Found %i resources</h3>"""%len(resources)
3638: resources.sort(sortHTML)
3639: for resource in resources:
3640: echo_url=resource[1].absolute_url()
3641:
3642: if hasattr(resource[1],'title'):
3643: title=resource[1].title
3644: else:
3645: title="None"
3646: if filter:
3647: if re.search(filter,title):
3648: ret+="""\n<p><a href="%s">%s</a></p>"""%(echo_url,title)
3649: else:
3650: ret+="""\n<p><a href="%s">%s</a></p>"""%(echo_url,title)
3651:
3652: ret +="""\n</body></html>"""
3653:
3654: #self.REQUEST.RESPONSE.setHeader("Content-Type", "text/html")
3655: #self.REQUEST.RESPONSE.write(ret)
3656: return ret
3657:
1.81 dwinter 3658: def getResourcesXML(self,viewerType=None,filter=None):
3659: """gebe all ressourcen aus"""
3660: ret="""<?xml version="1.0" ?>
3661: <index>"""
3662: for resource in self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1):
3663:
3664: echo_url=resource[1].absolute_url()
3665: if hasattr(resource[1],'link'):
3666: viewer_url=resource[1].link
3667: else:
3668: viewer_url="NO URL"
3669: if filter:
3670: if re.search(filter,viewer_url):
3671: ret+="""\n<resource echoLink="%s" viewerLink="%s"/>"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(viewer_url,safe='/:?'))
3672: else:
3673: ret+="""\n<resource echoLink="%s" viewerLink="%s"/>"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(viewer_url,safe='/:?'))
3674: ret +="""\n</index>"""
3675:
3676: self.REQUEST.RESPONSE.setHeader("Content-Type", "text/xml")
3677: self.REQUEST.RESPONSE.write(ret)
1.83 dwinter 3678:
3679: def getFullTextsXML(self,viewerType=None,filter=None):
3680: """gebe all ressourcen aus"""
3681: ret="""<?xml version="1.0" ?>
3682: <index>"""
3683: for resource in self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1):
3684:
3685: echo_url=resource[1].absolute_url()
3686: if resource[1].getFullTextXML(noredirect="yes"):
3687: if hasattr(resource[1],'link'):
3688: viewer_url=echo_url+"/getFullTextXML"
3689: else:
3690: viewer_url="NO URL"
3691: if filter:
3692: if re.search(filter,viewer_url):
3693: ret+="""\n<resource echoLink="%s" viewerLink="%s"/>"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(viewer_url,safe='/:?'))
3694: else:
3695: ret+="""\n<resource echoLink="%s" viewerLink="%s"/>"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(viewer_url,safe='/:?'))
3696: ret +="""\n</index>"""
1.90 dwinter 3697:
1.81 dwinter 3698:
1.83 dwinter 3699: self.REQUEST.RESPONSE.setHeader("Content-Type", "text/xml")
3700: self.REQUEST.RESPONSE.write(ret)
1.108 dwinter 3701:
3702:
1.109 dwinter 3703: def getMetaDatasXML(self,viewerType=None,filter=None):
1.108 dwinter 3704: """gebe all ressourcen aus"""
3705: ret="""<?xml version="1.0" ?>
3706: <index>"""
3707: for resource in self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1):
3708:
3709: echo_url=resource[1].absolute_url()
1.136 casties 3710:
3711: if hasattr(resource[1],'link'):
3712: meta_url=echo_url+"/getMetaDataXML"
3713: else:
3714: meta_url="NO_URL"
3715:
3716: if filter and not re.search(filter,viewer_url):
3717: continue
3718:
1.153 dwinter 3719: #modificationDate=time.strptime(str(resource[1].bobobase_modification_time()),"%Y/%m/%d %H:%M:%S %Z")
3720:
3721: modificationDate=resource[1].bobobase_modification_time().strftime("%Y/%m/%d %H:%M:%S")
3722:
3723: ret+="""\n<resource resourceLink="%s" metaLink="%s" modificationDate="%s"/>"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(meta_url,safe='/:?'),modificationDate)
3724:
1.136 casties 3725:
1.108 dwinter 3726: ret +="""\n</index>"""
3727:
3728:
3729: self.REQUEST.RESPONSE.setHeader("Content-Type", "text/xml")
3730: self.REQUEST.RESPONSE.write(ret)
3731:
1.106 jdamerow 3732:
3733: def findPartners(self):
3734: """find all partners in partners"""
1.107 jdamerow 3735: par=self.ZopeFind(self.partners, obj_metatypes='ECHO_partner')
1.106 jdamerow 3736: return par
1.114 jdamerow 3737:
3738: def getPartnerFromID(self):
3739: """find partner form ID return object"""
1.115 jdamerow 3740: pa=self.REQUEST['partner']
1.116 jdamerow 3741: par=self.ZopeFind(self.partners, obj_ids=[pa])
1.114 jdamerow 3742: return par
1.117 jdamerow 3743:
3744: def getPartnerFromIDParameter(self, id):
3745: """ find partners from ID"""
3746: par=self.ZopeFind(self.partners, obj_ids=[id])
3747: return par
1.157 jdamerow 3748:
3749: def getInstitutionFromID(self,id):
3750: """ find institution from id """
3751: inst=self.ZopeFind(self.institutions, obj_ids=[id])
3752: return inst
1.108 dwinter 3753:
1.1 casties 3754:
1.13 dwinter 3755: def manage_addECHO_root(self,id,title,RESPONSE=None):
1.1 casties 3756: """Add an ECHO_root"""
3757: self._setObject(id,ECHO_root(id,title))
3758:
3759: if RESPONSE is not None:
3760: RESPONSE.redirect('manage_main')
3761:
1.13 dwinter 3762: def manage_addECHO_rootForm(self):
1.1 casties 3763: """Nothing yet"""
1.13 dwinter 3764: pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_root.zpt').__of__(self)
1.1 casties 3765: return pt()
1.93 dwinter 3766:
3767: class ECHO_copyrightType(Folder):
3768: """copyright typ"""
3769:
3770: meta_type="ECHO_copyrightType"
3771:
1.119 jdamerow 3772: def __init__(self,id,title,label,url):
1.93 dwinter 3773: """init"""
3774: self.id=id
3775: self.title=title
3776: self.label=label
1.119 jdamerow 3777: self.url=url
1.93 dwinter 3778:
3779: manage_options = Folder.manage_options+(
3780: {'label':'Main Config','action':'ECHO_copyrightType_config_mainForm'},
3781: )
3782:
3783: def ECHO_copyrightType_config_mainForm(self):
3784: """change form"""
3785: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_copyrightType').__of__(self)
3786: pt.content_type="text/html"
3787: return pt()
3788:
1.119 jdamerow 3789: def ECHO_copyrightType_config_main(self,title,label,url,RESPONSE=None):
1.93 dwinter 3790: """change"""
3791: self.title=title
3792: self.label=label
1.119 jdamerow 3793: self.url=url
1.93 dwinter 3794:
3795: if RESPONSE is not None:
3796: RESPONSE.redirect('manage_main')
3797:
3798: def manage_addECHO_copyrightTypeForm(self):
3799: """Form for adding a ressource"""
3800: pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_copyrightTypeForm.zpt').__of__(self)
3801: return pt()
3802:
3803:
1.119 jdamerow 3804: def manage_addECHO_copyrightType(self,id,title,label,url,RESPONSE=None):
1.93 dwinter 3805: """addaresource"""
3806:
1.119 jdamerow 3807: newObj=ECHO_copyrightType(id,title,label,url)
1.93 dwinter 3808:
3809: self._setObject(id,newObj)
3810:
3811: if RESPONSE is not None:
3812: RESPONSE.redirect('manage_main')
3813:
3814:
1.1 casties 3815:
3816: class ECHO_partner(Image,Persistent):
3817: """ECHO Partner"""
3818:
3819: meta_type="ECHO_partner"
3820:
1.131 jdamerow 3821: def __init__(self, id, title,url, file, copyrightType, person, email, country, color, content_type='', precondition=''):
1.1 casties 3822: self.__name__=id
3823: self.title=title
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.1 casties 3829: self.precondition=precondition
1.101 jdamerow 3830: self.copyrightType=copyrightType
1.1 casties 3831: data, size = self._read_data(file)
1.29 dwinter 3832: content_type=self._get_content_type(file, data, id, content_type)
3833: self.update_data(data, content_type, size)
1.1 casties 3834:
3835: manage_options = Image.manage_options+(
3836: {'label':'Partner Information','action':'ECHO_partner_config'},
3837: )
3838:
1.98 dwinter 3839:
1.131 jdamerow 3840: def changeECHO_partner(self,url,copyrightType,person, email, country, color, RESPONSE=None):
1.1 casties 3841: """Change main information"""
3842: self.url=url
1.99 jdamerow 3843: self.person=person
3844: self.email=email
3845: self.country=country
1.131 jdamerow 3846: self.color=color
1.100 jdamerow 3847: self.copyrightType=copyrightType
1.1 casties 3848: if RESPONSE is not None:
3849: RESPONSE.redirect('manage_main')
3850:
3851:
3852:
3853: def ECHO_partner_config(self):
3854: """Main configuration"""
3855: if not hasattr(self,'url'):
3856: self.url=""
1.13 dwinter 3857: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_partner.zpt').__of__(self)
1.1 casties 3858: return pt()
3859:
3860:
1.13 dwinter 3861: manage_addECHO_partnerForm=DTMLFile('dtml/ECHO_partnerAdd',globals(),
1.1 casties 3862: Kind='ECHO_partner',kind='ECHO_partner')
3863:
3864:
3865:
1.131 jdamerow 3866: def manage_addECHO_partner(self, id, url, person, email, country, color, file=None, copyrightType='', title='', precondition='', content_type='',
1.1 casties 3867: REQUEST=None):
3868: """
3869: Add a new ECHO_partner object.
3870:
3871: Creates a new ECHO_partner object 'id' with the contents of 'file'.
3872: Based on Image.manage_addImage
3873: """
3874:
3875: id=str(id)
3876: title=str(title)
1.29 dwinter 3877: content_type=str(content_type)
1.1 casties 3878: precondition=str(precondition)
3879:
3880: id, title = OFS.Image.cookId(id, title, file)
3881:
3882: self=self.this()
3883:
3884: # First, we create the image without data:
1.131 jdamerow 3885: self._setObject(id, ECHO_partner(id,title,url,'',copyrightType, person, email, country, color, content_type, precondition))
1.1 casties 3886:
3887: # Now we "upload" the data. By doing this in two steps, we
3888: # can use a database trick to make the upload more efficient.
3889: if file:
3890: self._getOb(id).manage_upload(file)
1.29 dwinter 3891: if content_type:
3892: self._getOb(id).content_type=content_type
1.1 casties 3893:
3894: if REQUEST is not None:
3895: try: url=self.DestinationURL()
3896: except: url=REQUEST['URL1']
3897: REQUEST.RESPONSE.redirect('%s/manage_main' % url)
3898: return id
3899:
1.157 jdamerow 3900: class ECHO_linkList(ZopePageTemplate):
3901: """LinkList Objekt"""
3902: meta_type="ECHO_linkList"
3903:
3904: _default_content_fn = os.path.join(package_home(globals()), 'html/ECHO_pageTemplateDefault.html')
3905:
3906: manage_options = ZopePageTemplate.manage_options+(
3907: {'label':'Main Config','action':'changeECHO_linkListWeightForm'},
3908: )
3909:
3910: def content_html(self):
3911: """content_html"""
3912: return content_html(self,'pageTemplate')
3913:
3914: def changeECHO_linkListWeightForm(self):
3915: """change"""
3916: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_linkListTemplate.zpt').__of__(self)
3917: return pt()
3918:
3919: def changeECHO_linkListWeight(self,contentType,label,RESPONSE=None):
3920: """change"""
3921: self.contentType=contentType
3922: self.label=label
3923:
3924: if RESPONSE is not None:
3925: RESPONSE.redirect('manage_main')
3926:
3927: def getLabel(self):
3928: if hasattr(self,'label'):
3929: return self.label.encode('utf-8')
3930: else:
3931: return 0
3932:
3933: def getcontentType(self):
3934: """get contentType"""
3935: if hasattr(self,'contentType'):
3936: return self.contentType
3937: else:
3938: return 0
3939:
3940: def __init__(self, id, label, title=None, text=None, contentType=None):
3941: self.id = str(id)
3942: self.title=title
3943: self.label=label
3944: self.ZBindings_edit(self._default_bindings)
3945: if text is None:
3946: text = ''
3947: self.pt_edit(text, contentType)
3948:
3949:
3950:
3951:
3952: def manage_addECHO_linkListForm(self):
3953: """Form for adding"""
3954: pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_linkListTemplate.zpt').__of__(self)
3955: return pt()
3956:
3957: from urllib import quote
3958:
3959:
3960: def manage_addECHO_linkList(self, id, label,contentType=0,title=None, text=None,
3961: REQUEST=None, submit=None):
3962: """Add a LinkList with optional file content."""
3963:
3964: id = str(id)
3965: if REQUEST is None:
3966: self._setObject(id, ECHO_linkList(id, label, text))
3967: ob = getattr(self, id)
3968: setattr(ob,'contentType',contentType)
3969: if title:
3970: ob.pt_setTitle(title)
3971: return ob
3972: else:
3973: file = REQUEST.form.get('file')
3974: headers = getattr(file, 'headers', None)
3975: if (headers is None) or (not file.filename):
3976: zpt = ECHO_linkList(id, file)
3977: else:
3978: zpt = ECHO_linkList(id, label,'', file, headers.get('contentType'))
3979:
3980: self._setObject(id, zpt)
3981: ob = getattr(self, id)
3982: if title:
3983: ob.pt_setTitle(title)
3984:
3985: try:
3986: u = self.DestinationURL()
3987: except AttributeError:
3988: u = REQUEST['URL1']
3989:
3990: if submit == " Add and Edit ":
3991: u = "%s/%s" % (u, quote(id))
3992: REQUEST.RESPONSE.redirect(u+'/manage_main')
3993: return ''
3994:
3995:
3996: class ECHO_support(Folder):
1.160 dwinter 3997: """gefÂrdert durch"""
1.157 jdamerow 3998: meta_type="ECHO_support"
3999:
4000:
4001:
4002: def __init__(self,id,institutions=None):
4003: """init"""
4004: self.id=id
1.159 jdamerow 4005: self.title=''
1.157 jdamerow 4006: self.institutions=toList(institutions)
4007:
4008: def getSupporter(self):
4009: """return institutions"""
4010: if self.institutions:
4011: return self.institutions
4012: else:
4013: return []
4014:
4015: manage_options = Folder.manage_options+(
4016: {'label':'Main Config','action':'ECHO_support_configForm'},
4017: )
4018:
4019: def ECHO_support_configForm(self):
4020: """change form"""
4021: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_support').__of__(self)
4022: pt.content_type="text/html"
4023: return pt()
4024:
4025: def ECHO_support_config(self,institutions=None,RESPONSE=None):
4026: """change"""
4027: self.institutions=toList(institutions)
4028:
4029: if RESPONSE is not None:
4030: RESPONSE.redirect('manage_main')
4031:
4032:
4033: def manage_addECHO_supportForm(self):
4034: """Form for adding"""
4035: pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_support.zpt').__of__(self)
4036: return pt()
4037:
1.159 jdamerow 4038: def manage_addECHO_support(self, id,institutions=None,RESPONSE=None):
1.157 jdamerow 4039: """add the copyright"""
4040:
4041: meta_type="ECHO_support"
4042:
4043:
4044: self._setObject(id, ECHO_support(id,institutions))
4045:
4046: if RESPONSE is not None:
4047: RESPONSE.redirect('manage_main')
4048:
4049:
4050: class ECHO_institution(Image,Persistent):
4051: """ECHO Institution"""
4052:
4053: meta_type="ECHO_institution"
4054:
4055: def __init__(self, id, title,url, file, person, email, country, content_type='', precondition=''):
4056: self.__name__=id
4057: self.title=title
4058: self.url=url
4059: self.person=person
4060: self.email=email
4061: self.country=country
4062: self.precondition=precondition
4063: data, size = self._read_data(file)
4064: content_type=self._get_content_type(file, data, id, content_type)
4065: self.update_data(data, content_type, size)
4066:
4067: manage_options = Image.manage_options+(
4068: {'label':'Institution Information','action':'ECHO_institution_config'},
4069: )
4070:
4071:
4072: def changeECHO_institution(self,url,person, email, country,RESPONSE=None):
4073: """Change main information"""
4074: self.url=url
4075: self.person=person
4076: self.email=email
4077: self.country=country
4078: if RESPONSE is not None:
4079: RESPONSE.redirect('manage_main')
4080:
4081:
4082:
4083: def ECHO_institution_config(self):
4084: """Main configuration"""
4085: if not hasattr(self,'url'):
4086: self.url=""
4087: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_institution.zpt').__of__(self)
4088: return pt()
4089:
4090:
4091: manage_addECHO_institutionForm=DTMLFile('dtml/ECHO_institutionAdd',globals(),
4092: Kind='ECHO_institution',kind='ECHO_institution')
4093:
4094:
1.1 casties 4095:
1.157 jdamerow 4096: def manage_addECHO_institution(self, id, url, person, email, country, file=None, title='', precondition='', content_type='',
4097: REQUEST=None):
4098: """
4099: Add a new ECHO_institution object.
4100:
4101: Creates a new ECHO_institution object 'id' with the contents of 'file'.
4102: Based on Image.manage_addImage
4103: """
4104:
4105: id=str(id)
4106: title=str(title)
4107: content_type=str(content_type)
4108: precondition=str(precondition)
4109:
4110: id, title = OFS.Image.cookId(id, title, file)
4111:
4112: self=self.this()
4113:
4114: # First, we create the image without data:
4115: self._setObject(id, ECHO_institution(id,title,url,'', person, email, country, content_type, precondition))
4116:
4117: # Now we "upload" the data. By doing this in two steps, we
4118: # can use a database trick to make the upload more efficient.
4119: if file:
4120: self._getOb(id).manage_upload(file)
4121: if content_type:
4122: self._getOb(id).content_type=content_type
4123:
4124: if REQUEST is not None:
4125: try: url=self.DestinationURL()
4126: except: url=REQUEST['URL1']
4127: REQUEST.RESPONSE.redirect('%s/manage_main' % url)
1.160 dwinter 4128: return id
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>