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