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