Annotation of ECHO_content/ECHO_collection.py, revision 1.97
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 *
17: from OFS.Image import Image
18: from Globals import DTMLFile
19: from OFS.Folder import Folder
20: from OFS.SimpleItem import SimpleItem
21: from AccessControl import ClassSecurityInfo
1.85 dwinter 22: from AccessControl.User import UserFolder
1.1 casties 23: from Globals import InitializeClass
24: from Globals import DTMLFile
1.84 dwinter 25: import Globals
1.1 casties 26: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
27: from Products.PageTemplates.PageTemplate import PageTemplate
1.29 dwinter 28: from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
29: from Globals import Persistent, package_home
1.1 casties 30: from Acquisition import Implicit
1.52 dwinter 31: from ECHO_helpers import displayTypes
1.84 dwinter 32:
33:
1.50 dwinter 34: try:
35: from psycopg import libpq
36: except:
37: try:
38: from pyPgSQL import libpq
39: except:
40: print "ECHO_collection: Warning - No libpq imported!"
41:
1.14 dwinter 42: import xml.dom.minidom
1.1 casties 43:
44: import urllib
45: import xml.dom.minidom
1.23 dwinter 46: from ECHO_graphicalOverview import javaHandler,javaScriptMain
1.41 dwinter 47: import ECHO_helpers
1.1 casties 48:
1.6 dwinter 49: #List of different types for the graphical linking viewer
50: viewClassificationListMaster=['view point','area']
51:
1.73 dwinter 52: def checkDiffs(self,metadict):
53: """check differences"""
54:
1.90 dwinter 55:
56:
57:
1.73 dwinter 58: def NoneToEmpty(obj):
59: if obj:
60: return obj
61: else:
62: return ""
1.90 dwinter 63:
64:
1.73 dwinter 65:
66: diffs={}
1.90 dwinter 67:
1.73 dwinter 68: tags=self.findTagsFromMapping(self.contentType)
1.90 dwinter 69: self.referencetypes=tags[2]
70: self.fields=tags[3]
71:
72:
1.73 dwinter 73: for field in tags[1]:
74: try:
75: if (NoneToEmpty(self.getFieldValue(self.getFieldTag(tags,field)))==metadict[self.getFieldTag(tags,field)]):
76: diffs[self.getFieldTag(tags,field)]=1
77: else:
1.91 dwinter 78:
1.73 dwinter 79: diffs[self.getFieldTag(tags,field)]=0
80: except:
81: diffs[self.getFieldTag(tags,field)]=0
1.91 dwinter 82:
1.73 dwinter 83: return diffs
84:
1.29 dwinter 85: def content_html(self,type):
86: """template fuer content"""
87: #templates = self.ZopeFind(self.aq_parent,obj_ids=[type+"_template"])
88: #
89: #if templates:
90: # return templates[0][1]()
1.97 ! dwinter 91:
! 92: if hasattr(self,type+"_template"):
1.29 dwinter 93: obj=getattr(self,type+"_template")
94: return obj()
1.96 dwinter 95: else:
1.29 dwinter 96: pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_%s_template_standard.zpt'%type).__of__(self)
97: pt.content_type="text/html"
98: return pt()
99:
1.1 casties 100: def toList(field):
101: """Einzelfeld in Liste umwandeln"""
102: if type(field)==StringType:
103: return [field]
104: else:
105: return field
106:
107: def getText(nodelist):
108:
109: rc = ""
110: for node in nodelist:
111: if node.nodeType == node.TEXT_NODE:
112: rc = rc + node.data
113: return rc
114:
115:
1.65 casties 116: def sendFile(self, filename, type):
117: """sends an object or a local file (in the product) as response"""
118: paths = filename.split('/')
119: object = self
120: # look for an object called filename
121: for path in paths:
122: if hasattr(object, path):
123: object = getattr(object, path)
124: else:
125: object = None
126: break
127: if object:
128: # if the object exists then send it
1.76 casties 129: return object.index_html(self.REQUEST.REQUEST, self.REQUEST.RESPONSE)
1.65 casties 130: else:
131: # send a local file with the given content-type
132: fn = os.path.join(package_home(globals()), filename)
133: self.REQUEST.RESPONSE.setHeader("Content-Type", type)
134: self.REQUEST.RESPONSE.write(file(fn).read())
135: return
136:
1.87 casties 137: class BrowserCheck:
138: """check the browsers request to find out the browser type"""
139:
140: def __init__(self, zope):
141: self.ua = zope.REQUEST.get_header("HTTP_USER_AGENT")
142: self.isN4 = (string.find(self.ua, 'Mozilla/4.') > -1) and (string.find(self.ua, 'MSIE') < 0)
143: self.isIE = string.find(self.ua, 'MSIE') > -1
144: self.nav = self.ua[string.find(self.ua, '('):]
145: ie = string.split(self.nav, "; ")[1]
146: if string.find(ie, "MSIE") > -1:
147: self.versIE = string.split(ie, " ")[1]
148: self.isMac = string.find(self.ua, 'Macintosh') > -1
149: self.isWin = string.find(self.ua, 'Windows') > -1
150: self.isIEWin = self.isIE and self.isWin
151: self.isIEMac = self.isIE and self.isMac
152:
1.65 casties 153:
1.73 dwinter 154: def writeMetadata(url,metadict):
1.87 casties 155: """Einlesen der Metadaten und und erstellen des geaenderten XML file"""
1.73 dwinter 156:
157: try:
158: geturl=""
159: for line in urllib.urlopen(url).readlines():
160: geturl=geturl+line
161:
162:
163: except:
164: return (None,"Cannot open: "+url)
165:
166: try:
167: dom=xml.dom.minidom.parseString(geturl)
168: except:
169: return (None,"Cannot parse: "+url+"<br>"+geturl)
170:
171: metanodes=dom.getElementsByTagName('bib')
172:
173: if not metanodes:
174: metanodes=dom.getElementsByTagName('archimedes')
175:
176: metanode=metanodes[0]
177:
178: for metaData in metadict.keys():
1.90 dwinter 179:
1.73 dwinter 180: try:
181: nodeOld=metanode.getElementsByTagName(metaData)
182: except:
183: nodeOld=None
184:
185: if nodeOld:
186: metanode.removeChild(nodeOld[0]).unlink()
187: else:
188: # try also old writing rule - instead of _:
189: try:
190: nodeOld=metanode.getElementsByTagName(re.sub('_','-',metaData))
191: except:
192: nodeOld=None
193:
194: if nodeOld:
195: metanode.removeChild(nodeOld[0]).unlink()
196:
197: metanodeneu=dom.createElement(metaData)
1.90 dwinter 198: try:
199: metanodetext=dom.createTextNode(unicode(metadict[metaData],"utf-8"))
200: except:
201: metanodetext=dom.createTextNode(metadict[metaData].encode('utf-8'))
1.73 dwinter 202: metanodeneu.appendChild(metanodetext)
203: metanode.appendChild(metanodeneu)
204:
205:
1.90 dwinter 206: return dom.toxml().encode('utf-8')
1.73 dwinter 207:
1.90 dwinter 208:
209:
1.1 casties 210: def readMetadata(url):
1.73 dwinter 211: """Methode zum Auslesen der Metadateninformation zu einer Resource
1.1 casties 212: Vorerst noch Typ bib"""
213:
214: metadict={}
215: try:
216: geturl=""
217: for line in urllib.urlopen(url).readlines():
218: geturl=geturl+line
219:
220:
221: except:
222: return (None,"Cannot open: "+url)
223:
224: try:
225: dom=xml.dom.minidom.parseString(geturl)
226: except:
227: return (None,"Cannot parse: "+url+"<br>"+geturl)
228:
229: metanode=dom.getElementsByTagName('bib')
230: metadict['bib_type']='Book'
231: if len(metanode)==0:
232: metanode=dom.getElementsByTagName('archimedes')
233: metadict['bib_type']='Archimedes'
1.91 dwinter 234:
1.1 casties 235:
236: if not len(metanode)==0:
237: metacontent=metanode[0].childNodes
238:
239: try:
240: metadict['bib_type']=getText(dom.getElementsByTagName('bib')[0].attributes['type'].childNodes)
241: except:
242: """nothing"""
243:
244: for node in metacontent:
245: try:
1.95 dwinter 246: #print urllib.unquote(getText(node.childNodes)),getText(node.childNodes)
1.91 dwinter 247: metadict[re.sub('-','_',node.tagName.lower())]=urllib.unquote(getText(node.childNodes))
1.1 casties 248: except:
249: """nothing"""
250:
1.73 dwinter 251:
1.1 casties 252: return metadict,""
253:
254:
1.27 dwinter 255: def setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordstrs,viewClassification=""):
1.1 casties 256:
257: """Allegemeine Informationen zu einer ECHO Collection"""
258:
1.6 dwinter 259: self.viewClassification=viewClassification
260:
1.1 casties 261: self.label = label
262: self.title=title
263: self.description=description
1.27 dwinter 264: self.contentType=contentType
1.1 casties 265: self.responsible=responsible
266: self.credits=toList(credits)
267: self.weight=weight
268:
1.5 dwinter 269: coords=[]
1.1 casties 270: #coordinates of for rectangles
1.10 dwinter 271:
1.91 dwinter 272:
1.9 dwinter 273: if coordstrs:
274: for coordstr in coordstrs:
1.91 dwinter 275:
1.9 dwinter 276: try:
277: temco=coordstr.split(",")
278: except:
279: temco=[]
1.91 dwinter 280:
1.9 dwinter 281: coords.append(temco)
282:
1.10 dwinter 283:
1.5 dwinter 284: self.coords=coords[0:]
1.1 casties 285:
286:
287: class scientificClassification(SimpleItem,Persistent,Implicit):
1.13 dwinter 288: """outdated will be deleeted in the next versions: subclass"""
1.1 casties 289: security=ClassSecurityInfo()
290:
291: def __init__(self,context,science,practice):
292: self.context=context
293: self.science=science
294: self.practice=practice
295: self.id="scientific_Classification"
296:
297: security.declarePublic('get_context')
298: def get_context(self):
299: return self.context
300:
301: security.declarePublic('get_science')
302: def get_science(self):
303: return self.science
304:
305: security.declarePublic('get_practice')
306: def get_practice(self):
307: return self.practice
308:
309:
310: class scientificInformation(Folder,Persistent,Implicit):
1.13 dwinter 311: """outdated will be deleted in the next versions: subclass scientificInformation"""
1.1 casties 312: security=ClassSecurityInfo()
313:
314:
315:
316: def __init__(self,source_type,period):
317:
318: self.id="scientific_Information"
319: self.source_type=source_type
320: self.period=period
321:
322:
323:
324: security.declarePublic('get_source_type')
325: def get_source_type(self):
326: return self.source_type
327:
328: security.declarePublic('get_period')
329: def get_period(self):
330: return self.period
331:
1.29 dwinter 332: class ECHO_layoutTemplate(ZopePageTemplate):
333: """Create a layout Template for different purposes"""
334:
335: meta_type="ECHO_layoutTemplate"
336:
337: def __init__(self, id, text=None, content_type=None,EchoType=None):
338: self.id = str(id)
339:
340:
341:
342: self.ZBindings_edit(self._default_bindings)
343: if text is None:
344: self._default_content_fn = os.path.join(package_home(globals()),
345: 'zpt/ECHO_%s_template_standard.zpt'%EchoType)
346: text = open(self._default_content_fn).read()
347: self.pt_edit(text, content_type)
348:
1.32 dwinter 349:
1.29 dwinter 350: """change form"""
351:
352:
353: def manage_addECHO_layoutTemplateForm(self):
354: """Form for adding"""
355: pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_layoutTemplate.zpt').__of__(self)
356: return pt()
357:
358: from urllib import quote
359:
360:
361: def manage_addECHO_layoutTemplate(self, EchoType,title=None,REQUEST=None):
362: "Add a Page Template with optional file content."
363: if type(EchoType)==StringType:
364: EchoTypes=[EchoType]
365: else:
366: EchoTypes=EchoType
367:
368: for singleType in EchoTypes:
1.32 dwinter 369:
1.29 dwinter 370: id = str(singleType)+"_template"
371: if REQUEST is None:
372: self._setObject(id, ECHO_layoutTemplate(id, text,EchoType=singleType))
373: ob = getattr(self, id)
374:
375: if title:
376: ob.pt_setTitle(title)
377: return ob
378: else:
379: file = REQUEST.form.get('file')
380: headers = getattr(file, 'headers', None)
381: if headers is None or not file.filename:
382: zpt = ECHO_layoutTemplate(id,EchoType=singleType)
383: else:
384: zpt = ECHO_layoutTemplate(id, file, headers.get('content_type'))
385:
386: self._setObject(id, zpt)
387: ob = getattr(self, id)
388: if title:
389: ob.pt_setTitle(title)
390:
391: try:
392: u = self.DestinationURL()
393: except AttributeError:
394: u = REQUEST['URL1']
395:
396:
397: REQUEST.RESPONSE.redirect(u+'/manage_main')
398: return ''
1.1 casties 399:
1.90 dwinter 400: class ECHO_resource(Folder,Persistent):
1.1 casties 401: """ECHO Ressource"""
402: meta_type='ECHO_resource'
403:
1.6 dwinter 404: viewClassificationList=viewClassificationListMaster
1.1 casties 405:
1.41 dwinter 406: getSubCols = ECHO_helpers.getSubCols
1.48 dwinter 407: def getTitle(self):
408: """title"""
409: return self.title.encode('utf-8')
410:
411: def getLabel(self):
412: """title"""
413: return self.label.encode('utf-8')
1.41 dwinter 414:
1.29 dwinter 415: def content_html(self):
416: """template fuer content"""
417: return content_html(self,'resource')
418:
1.6 dwinter 419: def getViewClassification(self):
420: if hasattr(self,'viewClassification'):
421: return self.viewClassification
422: else:
423: return ""
1.83 dwinter 424:
425: def getFullTextXML(self,noredirect=None):
1.90 dwinter 426: """getFullTextXML; gives the FullText as an XML Document, and <error></error> if somthing goes wrong."""
1.83 dwinter 427: try:
428: fh=urllib.urlopen(self.metalink)
429: dom=xml.dom.minidom.parse(fh)
430: texttools=dom.getElementsByTagName('texttool')
431: text=texttools[0].getElementsByTagName('text')
432: texturl=getText(text[0].childNodes)
1.90 dwinter 433: self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
1.83 dwinter 434: if not noredirect:
435: self.REQUEST.RESPONSE.redirect(texturl)
436: else:
437: return texturl
438: except:
1.90 dwinter 439:
440: if not noredirect:
441: self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
442: self.REQUEST.RESPONSE.write("<error>no fulltext available</error>")
443: else:
444: return "<error>no fulltext available</error>"
1.92 dwinter 445:
446: def getCopyright(self):
447: """gib link auf copyright notiz aus"""
1.97 ! dwinter 448: if hasattr(self,'copyrightType') and hasattr(self.copyrightTypes,self.copyrightType):
! 449: obj=getattr(self.copyrightTypes,self.copyrightType)
1.94 dwinter 450: else:
451: obj=getattr(self.copyrightTypes,'generic')
452:
453: label=obj.label
454: link="copyrightTypes/"+obj.getId()+'/copyright.html'
455:
1.95 dwinter 456: return """<a target="_blank" href="%s">%s</a>"""%(link,label)
1.83 dwinter 457:
1.9 dwinter 458: def getCredits(self):
459: """Ausgabe der credits"""
460: if self.credits:
461: return self.credits
462: else:
463: return []
1.6 dwinter 464:
1.94 dwinter 465: def __init__(self,id,link,metalink,resourceID,title,label,description,contentType,renderingType,copyrightType,responsible,credits,weight,coords):
1.1 casties 466:
467: self.id = id
468: """Festlegen der ID"""
469:
470: self.label = label
471: self.link= link
472: self.metalink=metalink
473: self.title=title
474: self.weight=weight
475: self.credits=toList(credits)
476: self.description=description
1.27 dwinter 477: self.contentType=contentType
1.94 dwinter 478: self.copyrightType=copyrightType
1.90 dwinter 479: self.renderingType=renderingType
1.1 casties 480: self.responsible=responsible
1.90 dwinter 481: self.resourceID=resourceID
482:
1.9 dwinter 483: if coords:
484: coordsnew=[ string.split(x,",") for x in coords]
485: else:
486: coordsnew=[]
487:
1.1 casties 488: self.coords=coordsnew
489:
1.3 dwinter 490:
491: def getCoords(self):
1.73 dwinter 492: """gibt coordinaten als String zurück und löscht zugleich einträge die keine Koordinaten sind, letzteres zur korrektur der Eingabe der alten version"""
493: retList=[]
494: if hasattr(self,'coords'):
495: for x in self.coords:
496: if len(x)>1:
497: retList.append(string.join(x,","))
498: return retList
499:
500:
1.3 dwinter 501:
1.49 dwinter 502: def getContentType(self):
503: try:
504: return self.contentType
505: except:
506: return ""
1.1 casties 507:
1.73 dwinter 508: def getCopyrightType(self):
509: try:
510: return self.copyrightType
511: except:
512: return ""
513:
514: def getRenderingType(self):
515: try:
516: return self.renderingType
517: except:
518: return ""
519:
1.1 casties 520: def ECHO_resource_config(self):
521: """Main configuration"""
522:
523: if not hasattr(self,'weight'):
524: self.weight=""
525:
1.13 dwinter 526: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resource.zpt').__of__(self)
1.1 casties 527: return pt()
528:
529:
1.73 dwinter 530: def ECHO_resource_config_main(self):
531: """Main configuration"""
532:
533: if not hasattr(self,'weight'):
534: self.weight=""
535:
536: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resource_main.zpt').__of__(self)
537: return pt()
538:
539: def ECHO_resource_config_coords(self):
540: """Coords configuration """
541:
542: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resource_coords.zpt').__of__(self)
543: return pt()
544:
545: def ECHO_resource_config_credits(self):
546: """Main configuration"""
547:
548: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resource_credits.zpt').__of__(self)
549: return pt()
550:
551: def ECHO_resource_config_metadata(self):
552: """Main configuration"""
553:
554: if (hasattr(self,'metadata')) and not (hasattr(self,'metaDataHash')):
555: self.metaDataHash={}
556: self.contentType=self.bib_type
557: for data in self.metadata:
558: data_neu=re.sub('-','_',data)
559: self.metaDataHash[data_neu]=getattr(self,data)
1.91 dwinter 560:
1.73 dwinter 561:
562: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resource_metadata.zpt').__of__(self)
563: return pt()
564:
565:
566:
567:
568: def changeECHO_resource_main(self,metalink,link,title,label,description,contentType,renderingType,weight,resourceID,RESPONSE=None):
569: """Änderung der Properties"""
570: self.resourceID=resourceID
571: self.title=title
572: self.label=label
573: self.description=description
574:
575: self.contentType=contentType
576: self.renderingType=renderingType
577: self.weight=weight
578:
579: self.link=link
580: self.metalink=metalink
581:
582: if RESPONSE is not None:
583: RESPONSE.redirect('manage_main')
584:
585:
586: def changeECHO_resource_coords(self,coords,viewClassification,RESPONSE=None):
587: """Änderung der Properties - coords"""
588:
1.78 dwinter 589: if type(coords)==StringType:
590: coords=[coords]
591:
1.79 casties 592: try:
1.73 dwinter 593: coordsnew=[ string.split(x,",") for x in coords]
594: except:
595: coordsnew=[]
596:
597: self.coords=coordsnew[0:]
598: self.viewClassification=viewClassification
599:
600: if RESPONSE is not None:
601: RESPONSE.redirect('manage_main')
602:
603: def changeECHO_resource_credits(self,credits,responsible,copyrightType,RESPONSE=None):
604: """Änderung der Properties"""
605: self.credits=credits
606: self.responsible=responsible
607: self.copyrightType=copyrightType
608:
609: if RESPONSE is not None:
610: RESPONSE.redirect('manage_main')
611:
612:
1.90 dwinter 613: def changeECHO_resource_metadata_local(self,RESPONSE=None):
614: """change metadata"""
615: tags=self.findTagsFromMapping(self.contentType)
616: for field in tags[1]:
617: self.metaDataHash[self.getFieldTag(tags,field)]=self.REQUEST.form[self.getFieldTag(tags,field)]
618:
619:
620:
621: if RESPONSE is not None:
622: RESPONSE.redirect('manage_main')
623:
1.73 dwinter 624: def changeECHO_resource_metadata(self,RESPONSE=None):
625: """change metadata"""
626: tags=self.findTagsFromMapping(self.contentType)
1.75 dwinter 627: self.OSAS_meta={}
1.73 dwinter 628: for field in tags[1]:
629: try:
630: self.metaDataHash[self.getFieldTag(tags,field)]=self.REQUEST.form[self.getFieldTag(tags,field)]
631: self.OSAS_meta[self.getFieldTag(tags,field)]=self.REQUEST.form['OSAS_%s'%self.getFieldTag(tags,field)]
632: except:
633: """nothing"""
634:
1.75 dwinter 635: return urllib.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.73 dwinter 636:
637: if RESPONSE is not None:
638: RESPONSE.redirect('manage_main')
639:
640:
1.90 dwinter 641: def getMDValue(self,fieldName):
642: return self.metaDataHash.get(fieldName,'!!NOT USED HERE in Type: %s'%self.contentType)
643:
1.73 dwinter 644: def newMetaXML(self):
1.75 dwinter 645: """new index.meta"""
1.73 dwinter 646: self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
647: return writeMetadata(self.metalink,self.OSAS_meta)
648:
1.90 dwinter 649:
650: def getMetaDataXML(self):
651: """prints out metadata as stored in the echo environment, format is the index.meta format"""
652: self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
653: return writeMetadata(self.metalink,self.metaDataHash)
654:
1.27 dwinter 655: def changeECHO_resource(self,metalink,link,title,label,description,contentType,responsible,weight,viewClassification="",coords=None,credits=None,RESPONSE=None):
1.1 casties 656: """Änderung der Properties"""
657:
1.33 dwinter 658: try:
659: coordsnew=[ string.split(x,",") for x in coords]
660: except:
661: coordsnew=[]
1.21 dwinter 662:
1.27 dwinter 663: setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordsnew)
1.62 dwinter 664: self.viewClassification=viewClassification
1.21 dwinter 665: self.coords=coordsnew[0:]
1.1 casties 666: self.link=link
667: self.metalink=metalink
668:
669: if RESPONSE is not None:
670: RESPONSE.redirect('manage_main')
671:
672:
673: manage_options = Folder.manage_options+(
1.73 dwinter 674: {'label':'Main Config','action':'ECHO_resource_config_main'},
1.95 dwinter 675: {'label':'Change Partners & Copyright','action':'ECHO_resource_config_credits'},
1.73 dwinter 676: {'label':'Change Metadata','action':'ECHO_resource_config_metadata'},
677: {'label':'Change Coords','action':'ECHO_resource_config_coords'},
678: {'label':'Add coords','action':'ECHO_graphicEntry'},
679: {'label':'Sync Metadata','action':'ECHO_getResourceMD'},
680: )
1.1 casties 681:
1.20 dwinter 682: def getOverview(self):
683: """overview graphics"""
684:
685: return self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['overview'])[0][1]
686:
1.3 dwinter 687: def ECHO_graphicEntry(self):
688: """DO nothing"""
1.20 dwinter 689: overview = self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['overview'])
1.19 dwinter 690: if overview:
1.13 dwinter 691: pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_draw.zpt').__of__(self)
1.3 dwinter 692: return pt()
693: else:
694: return "NO OVERVIEW GRAPHICS"
695:
1.4 dwinter 696: def ECHO_enterCoords(self,coordstr,angle="",RESPONSE=None):
1.3 dwinter 697: """Enter coords"""
698: coords=self.coords
1.4 dwinter 699: temco=coordstr.split(",")
700: temco.append(angle)
701: coords.append(temco)
702:
1.3 dwinter 703: self.coords=coords[0:]
1.13 dwinter 704:
1.3 dwinter 705: if RESPONSE is not None:
706: RESPONSE.redirect('ECHO_graphicEntry')
707:
1.73 dwinter 708:
709: def isDefinedInThisSet(self,fields,field):
710: """checks if field is defined in fields"""
711: if (fields[0].has_key(field)) and not (fields[0][field]==""):
712: return 1
713: else:
714:
715: return 0
716:
717: def getFieldLabel(self,fields,field):
718: """get labels"""
719: try:
720: ret =fields[0][field]
721: if ret == "":
722: return field
723: else:
724: return ret
725: except:
726: return field
727:
728:
729:
730: def getFieldTag(self,fields,field):
731: """get labels"""
732: try:
733: ret =fields[0][field]
734: if ret == "":
735: return field
736: else:
737: return ret
738: except:
739: return field
740:
741:
742:
743: def getFieldValue(self,field):
744: """get value"""
1.91 dwinter 745:
1.73 dwinter 746: try:
747:
748: ret=self.metaDataHash[field]
749: if ret == "":
750: return None
751: else:
752: return ret
753: except:
754: return None
755:
1.90 dwinter 756: def getMetaDataHash(self):
757: """md hash"""
758: return self.metaDataHash
759:
760: def setFieldValue(self,field,value):
761: """get value"""
1.91 dwinter 762:
1.90 dwinter 763: if not hasattr(self,'metaDataHash'):
764: setattr(self,'metaDataHash',{})
765: self.metaDataHash[field]=value[0:]
766:
767:
768:
1.73 dwinter 769: def findLabelsFromMapping(self,referenceType):
770: """gib hash mit label -> generic zurueck"""
1.90 dwinter 771: #return {},[]
772:
773: temp=self.ZopeFind(self.standardMD)
774:
775: if referenceType=="":
776: referenceType="book"
777:
1.73 dwinter 778:
779: bibdata={}
780: retdata={}
1.90 dwinter 781: fields=[]
1.73 dwinter 782: fieldlist=self.standardMD.fieldList
783:
784: for referenceTypeF in self.referencetypes:
1.91 dwinter 785:
1.86 dwinter 786: if referenceTypeF[1].title.lower() == referenceType.lower():
1.91 dwinter 787:
1.86 dwinter 788: try:
789: bibdata[referenceTypeF[1].title]=referenceTypeF[1].fields
790: referenceType=referenceTypeF[1].title
791: except:
792: bibdata[referenceType]=referenceTypeF[1].fields
793:
794:
1.73 dwinter 795: bibdata['data']=referenceTypeF[1]
1.90 dwinter 796: fields=bibdata[referenceType]
1.73 dwinter 797: for field in fieldlist:
798: retdata[field]=referenceTypeF[1].getValue(field)[1]
1.91 dwinter 799:
1.90 dwinter 800: return retdata,fieldlist,temp,fields
1.73 dwinter 801:
802: def findTagsFromMapping(self,referenceType):
803: """gib hash mit label -> generic zurueck"""
1.90 dwinter 804:
805:
806: if referenceType=="":
807: referenceType="book"
808:
809: temp = self.ZopeFind(self.standardMD)[0:]
810:
811:
812: #self.referencetypes=temp[0:]
813:
1.73 dwinter 814:
815:
1.90 dwinter 816:
817:
818:
1.73 dwinter 819: bibdata={}
820: retdata={}
821: fieldlist=self.standardMD.fieldList
822:
1.90 dwinter 823: for referenceTypeF in temp:
1.73 dwinter 824:
1.86 dwinter 825: if referenceTypeF[1].title.lower() == referenceType.lower():
826: try:
827: bibdata[referenceTypeF[1].title]=referenceTypeF[1].fields
828: referenceType=referenceTypeF[1].title
829: except:
830: bibdata[referenceType]=referenceTypeF[1].fields
1.73 dwinter 831: bibdata['data']=referenceTypeF[1]
1.90 dwinter 832: fields=bibdata[referenceType]
1.73 dwinter 833: for field in fieldlist:
834: retdata[field]=referenceTypeF[1].getValue(field)[0]
835:
1.90 dwinter 836: return retdata,fieldlist,temp,fields
1.73 dwinter 837:
838:
1.90 dwinter 839:
840: def copyIndex_meta2echo_resource(self,RESPONSE=None):
841: """copy MD von Index_meta to the echo_resource"""
1.95 dwinter 842:
1.90 dwinter 843: (metadict, error)=readMetadata(self.metalink)
844:
845: self.metaDataHash={}
846: if not error=="": #Fehler beim Auslesen des Metafiles
847: return "ERROR:",error
848: fields=self.findTagsFromMapping(self.contentType)
1.95 dwinter 849:
1.90 dwinter 850: #fields=self.findLabelsFromMapping(self.contentType)
851: for field in fields[1]:
1.95 dwinter 852:
1.90 dwinter 853: if self.isDefinedInThisSet(fields,field):
1.95 dwinter 854: #print urllib.unquote(metadict.get(self.getFieldTag(fields,field),''))
1.90 dwinter 855: self.setFieldValue(self.getFieldTag(fields,field),metadict.get(self.getFieldTag(fields,field),''))
856:
857:
858:
859: if RESPONSE:
860: return RESPONSE.redirect('manage_main')
861:
1.1 casties 862: def ECHO_getResourceMD(self,template="yes"):
863: """Einlesen der Metadaten und Anlegen dieser Metadaten als Informationen zur Resource"""
864: (metadict, error)=readMetadata(self.metalink)
865:
1.90 dwinter 866:
1.1 casties 867:
868: if not error=="": #Fehler beim Auslesen des Metafiles
1.73 dwinter 869: return "ERROR:",error
870:
871:
1.86 dwinter 872: if not (metadict['bib_type'].lower()==self.contentType.lower()):
1.73 dwinter 873: self.REQUEST.SESSION['contentStorage']=metadict['bib_type']
874: self.REQUEST.SESSION['contentZope']=self.contentType
1.1 casties 875:
1.73 dwinter 876: return PageTemplateFile('Products/ECHO_content/zpt/ECHO_getResourceMDErrorContentType.zpt').__of__(self)()
1.1 casties 877:
1.90 dwinter 878: self.REQUEST.SESSION['metadict']=metadict
879:
880:
881:
882: self.REQUEST.SESSION['diffs']=checkDiffs(self,self.REQUEST.SESSION['metadict'])
883:
1.13 dwinter 884:
1.73 dwinter 885:
1.1 casties 886: if template=="yes":
1.90 dwinter 887: pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_resourceMD.zpt').__of__(self)
888: return pt()
1.73 dwinter 889:
1.90 dwinter 890:
1.73 dwinter 891:
892:
1.1 casties 893:
894: def ECHO_getMD(self,item):
895: """Ausgabe der MD"""
896: return getattr(self,item)
897:
898: def index_html(self):
899: """standard page"""
900:
901: return self.REQUEST.RESPONSE.redirect(self.link)
902:
1.90 dwinter 903: def startpage_html(self):
904: """prints out a startpage for a resource for use e.g. in the BVE"""
905:
906: # suche ob startpage.html in dem Ordner vorhanden ist, dann wir diese angezeigt
907:
908: sp=self.ZopeFind(self,obj_ids=['startpage.html'])
909:
910: if sp:
911: return sp[1]()
912:
913: #prüfen ob irgendwo ein template
914: if hasattr(self,'startpage_index_template'):
915: return self.startpage_index_template()
916:
917: #generisches template ausgeben
918:
919: pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_startpage_index_template_standard.zpt').__of__(self)
920: pt.content_type="text/html"
921: return pt()
922:
923: def toc_html(self):
924:
925: sp=self.ZopeFind(self,obj_ids=['toc.html'])
926:
927: if sp:
928: return sp[0][1]()
929:
930:
931:
1.1 casties 932: def generate_label(self):
933: """Erzeugt_standard_Label aus Template"""
934: pt=getattr(self,"label_template_"+self.bib_type)
1.13 dwinter 935:
1.1 casties 936: return pt()
937:
1.90 dwinter 938: def generate_title(self,RESPONSE=None):
939: """Erzeugt_standard_Label aus Template"""
940: pt=getattr(self,"label_template_"+self.contentType)
941:
942: self.title=pt()
943:
944: return pt()
945:
1.13 dwinter 946: def manage_addECHO_resourceForm(self):
947: """Form for adding a ressource"""
948: pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_resourceForm.zpt').__of__(self)
1.1 casties 949: return pt()
950:
951:
1.10 dwinter 952:
1.94 dwinter 953: 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 954: """addaresource"""
1.1 casties 955:
1.94 dwinter 956: newObj=ECHO_resource(id,link,metalink,resourceID,title,label,description,contentType,renderingType,copyrightType,responsible,credits,weight,coords)
1.1 casties 957:
958: self._setObject(id,newObj)
1.13 dwinter 959:
1.1 casties 960: if RESPONSE is not None:
961: RESPONSE.redirect('manage_main')
962:
963:
964: class ECHO_externalLink(Folder):
965: """Link zu einer externen Ressource"""
966: security=ClassSecurityInfo()
967: meta_type='ECHO_externalLink'
968:
1.48 dwinter 969: def getTitle(self):
970: """title"""
971: return self.title.encode('utf-8')
972:
973: def getLabel(self):
974: """title"""
975: return self.label.encode('utf-8')
976:
1.29 dwinter 977: def content_html(self):
978: """template fuer content"""
979: return content_html(self,'externalLink')
980:
1.27 dwinter 981: def __init__(self,id,link,title,label,description,contentType,responsible,credits,weight,coords):
1.1 casties 982:
983: self.id = id
984: """Festlegen der ID"""
985:
986: self.credits=toList(credits)
987: self.label = label
988: self.link= link
989: self.title=title
990: self.weight=weight
991: self.description=description
1.27 dwinter 992: self.contentType=contentType
1.1 casties 993: self.responsible=responsible
994: coordsnew=[ string.split(x,",") for x in coords]
995: self.coords=coordsnew
996:
997: def ECHO_externalLink_config(self):
998: """Main configuration"""
999:
1000: if not hasattr(self,'weight'):
1001: self.weight=""
1002: if not hasattr(self,'coords'):
1.9 dwinter 1003:
1.1 casties 1004: self.coords=['']
1.91 dwinter 1005:
1.1 casties 1006:
1.13 dwinter 1007: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_externalLink.zpt').__of__(self)
1.1 casties 1008: return pt()
1009:
1010:
1.37 dwinter 1011: def changeECHO_externalLink(self,link,title,label,description,contentType,responsible,weight,coords=None,credits=None,RESPONSE=None):
1.1 casties 1012:
1013: """Änderung der Properties"""
1.36 dwinter 1014: try:
1015: coordsnew=[ string.split(x,",") for x in coords]
1016: except:
1017: coordsnew=[]
1.1 casties 1018:
1.27 dwinter 1019: setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coords)
1.1 casties 1020:
1.21 dwinter 1021: self.coords=coordsnew[0:]
1.1 casties 1022: self.link=link
1023: if RESPONSE is not None:
1024: RESPONSE.redirect('manage_main')
1025:
1026:
1027: manage_options = Folder.manage_options+(
1028: {'label':'Main Config','action':'ECHO_externalLink_config'},
1029: )
1.17 dwinter 1030:
1031: def getCredits(self):
1032: """Ausgabe der credits"""
1033: if self.credits:
1034: return self.credits
1035: else:
1036: return []
1037:
1.1 casties 1038: def index_html(self):
1039: """standard page"""
1040:
1041: return self.REQUEST.RESPONSE.redirect(self.link)
1042:
1.13 dwinter 1043: def manage_addECHO_externalLinkForm(self):
1044: """Form for external Links"""
1045: pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_externalLinkForm.zpt').__of__(self)
1.1 casties 1046: return pt()
1047:
1048:
1.27 dwinter 1049: def manage_addECHO_externalLink(self,id,title,label,description,contentType,responsible,link,weight,coords=None,credits=None,RESPONSE=None):
1.13 dwinter 1050: """Add an external Link"""
1.1 casties 1051:
1.27 dwinter 1052: newObj=ECHO_externalLink(id,link,title,label,description,contentType,responsible,credits,weight,coords)
1.1 casties 1053:
1054: self._setObject(id,newObj)
1.13 dwinter 1055:
1.1 casties 1056: if RESPONSE is not None:
1057: RESPONSE.redirect('manage_main')
1058:
1.24 dwinter 1059:
1.51 dwinter 1060: class ECHO_link(ECHO_externalLink):
1061: """external_link"""
1062:
1063: meta_type="ECHO_link"
1064:
1065:
1.53 dwinter 1066: def content_html(self):
1.80 dwinter 1067: """template fuer link"""
1068: if hasattr(self,"link_template"):
1069: return content_html(self,'link')
1070: else:
1071: return content_html(self,'collection')
1.53 dwinter 1072:
1.51 dwinter 1073: def manage_addECHO_linkForm(self):
1074: """Form for external Links"""
1075: pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_linkForm.zpt').__of__(self)
1076: return pt()
1077:
1078:
1079: def manage_addECHO_link(self,id,title,label,description,contentType,responsible,link,weight,coords=None,credits=None,RESPONSE=None):
1080: """Add an external Link"""
1081:
1082: newObj=ECHO_link(id,link,title,label,description,contentType,responsible,credits,weight,coords)
1083:
1084: self._setObject(id,newObj)
1085:
1086: if RESPONSE is not None:
1087: RESPONSE.redirect('manage_main')
1088:
1.24 dwinter 1089:
1.1 casties 1090: class ECHO_collection(Folder, Persistent, Implicit):
1091: """ECHO Collection"""
1.84 dwinter 1092:
1.1 casties 1093: security=ClassSecurityInfo()
1094: meta_type='ECHO_collection'
1.69 dwinter 1095: viewClassificationList=viewClassificationListMaster
1096: displayTypes=displayTypes
1097:
1098: def getViewClassification(self):
1099: if hasattr(self,'viewClassification'):
1100: return self.viewClassification
1101: else:
1102: return ""
1.48 dwinter 1103:
1104: def getTitle(self):
1105: """title"""
1106: return self.title.encode('utf-8')
1107:
1108: def getLabel(self):
1109: """title"""
1110: return self.label.encode('utf-8')
1.1 casties 1111:
1.83 dwinter 1112:
1113:
1.45 dwinter 1114: def createRessourcesFromXMLForm(self):
1115: """form"""
1116: pt=PageTemplateFile('Products/ECHO_content/zpt/createRessourcesFromXMLForm.zpt').__of__(self)
1117: return pt()
1.83 dwinter 1118:
1.45 dwinter 1119: def createRessourcesFromXML(self,fileupload):
1120: """read an XML file for generating resources"""
1121: dom=xml.dom.minidom.parse(fileupload)
1122: ret="<h2>Added</h2>"
1123: for resource in dom.getElementsByTagName('resource'):
1124: link=getText(resource.getElementsByTagName('link')[0].childNodes)
1125: label=getText(resource.getElementsByTagName('label')[0].childNodes)
1126: #splitted=link.split("?")[0].split("/")
1127: #id=splitted[len(splitted)-1].encode('ascii')
1128: id=re.sub(" ","_",label).encode('ascii')
1129:
1130: ret+="<p>"+label+"</p>"
1.46 dwinter 1131: manage_addECHO_resource(self,id,label.encode('ascii'),label.encode('ascii'),"","","",link.encode('ascii'),"","")
1.45 dwinter 1132: return ret
1.25 dwinter 1133: def getImageTag(self):
1134: """GetTag"""
1135: try:
1136: return self.imageTag
1137: except:
1138: return ""
1139:
1.27 dwinter 1140: def addResource(self,id,title,label,description,contentType,responsible,link,metalink,weight,credits=None,coords=None,RESPONSE=None):
1.24 dwinter 1141: """SSS"""
1142: try:
1.27 dwinter 1143: manage_addECHO_resource(self,id,title,label,description,contentType,responsible,link,metalink,weight,credits=None,coords=None,RESPONSE=None)
1.24 dwinter 1144: return "done"
1145: except:
1146: return None
1.32 dwinter 1147:
1148: def getSecondaryLink(self):
1149: """secondary link"""
1150: try:
1151: return self.secondaryLink
1152: except:
1153: return ""
1154:
1155: def getSecondaryLinkTitle(self):
1156: """secondary link"""
1157: try:
1158: return self.secondaryLinkTitle
1159: except:
1160: return ""
1161:
1.24 dwinter 1162: def getCollectionTreeXML(self):
1163: """Tree as XML"""
1164:
1165: def getCollection(object,depth=0):
1166: depth+=1
1167: collections=""
1168: for entry in object.__dict__.keys():
1169: element=getattr(object,entry)
1170: try:
1.40 dwinter 1171: if element.meta_type in ["ECHO_collection","ECHO_group"]:
1.60 dwinter 1172: collections+="<element name=\""+quote(element.title)+"\" url=\""+element.absolute_url()+"\">"
1.24 dwinter 1173: collections+=getCollection(element,depth)+"</element>\n"
1174: except:
1175: """nothing"""
1176: return collections
1177:
1.60 dwinter 1178: ret="""<?xml version="1.0" encoding="utf-8" ?>"""
1179: return ret+"<collection>"+getCollection(self)+"</collection>"
1.24 dwinter 1180:
1.23 dwinter 1181: def createJavaScript(self):
1.88 casties 1182: """OLD CreateJava"""
1.72 casties 1183: ret=javaScriptMain
1.23 dwinter 1184:
1.65 casties 1185: dynamical="\n"
1.23 dwinter 1186: for ob in self.getGraphicCoords():
1.47 casties 1187: if ob[4][4] == "":
1.72 casties 1188: dynamical+="""Coords.push(new Coord('%s', Img, %s));\n"""%(ob[1],ob[0])
1189: else:
1190: dynamical+="""Coords.push(new Coord('%s', Img, %s));//%s\n"""%(ob[1],ob[0],ob[4][4])
1191: dynamical+="ShowArrow(new getObj('i.%s'),Img,%s);\n"%(ob[1],ob[0])
1192: ret+=javaHandler%dynamical
1193: return ret
1194:
1195: def createJSAreas(self):
1.88 casties 1196: """create area calls for JavaScript"""
1.72 casties 1197: dynamical="\n"
1198: for ob in self.getGraphicCoords():
1.74 casties 1199: if ob[5] == "area":
1.65 casties 1200: dynamical+="""addArea('%s', 'overview', %s, 'area');\n"""%(ob[1],ob[0])
1.47 casties 1201: else:
1.65 casties 1202: dynamical+="""addArea('%s', 'overview', %s, 'arrow');\n"""%(ob[1],ob[0])
1.72 casties 1203: return dynamical
1.74 casties 1204:
1205: def createMapHead(self):
1.88 casties 1206: """create javascript include and script tags for head"""
1.74 casties 1207: pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt/ECHO_content_map_frag_js')).__of__(self)
1208: return pt()
1.87 casties 1209:
1210: def createMapImg(self):
1211: """generate img-tag for map"""
1212: bt = BrowserCheck(self)
1213: tag = ""
1214: src = self.REQUEST['URL1'] + "/overview"
1215: if bt.isN4:
1216: tag += '<ilayer id="overview" visibility="show"><img src="%s"></ilayer>'%src
1217: else:
1218: tag += '<img id="overview" src="%s" />'%src
1219: return tag
1.74 casties 1220:
1221: def createMapLink(self, ob, text=None):
1222: """generate map link"""
1.87 casties 1223: bt = BrowserCheck(self)
1.74 casties 1224: id = ob[1]
1225: link = ob[1]
1226: if text == None:
1227: text = ob[2]
1.87 casties 1228: tag = ""
1229: if bt.isN4:
1230: tag += '<ilayer id="a.%s"><a onmouseover="highlightPair(\'%s\', true)" onmouseout="highlightPair(\'%s\', false)" href="%s" target="_blank"'%(id,id,id,link)
1231: tag += ">" + text + "</a></ilayer>"
1232: else:
1233: tag = '<a id="a.%s" onmouseover="highlightPair(\'%s\', true)" onmouseout="highlightPair(\'%s\', false)" href="%s" target="_blank"'%(id,id,id,link)
1234: if ob[3].contentType == 'text-popup':
1235: tag += ' title="%s"'%ob[3].description
1236: tag += ">" + text + "</a>"
1.74 casties 1237: return tag
1238:
1239: def createMapAux(self, ob, arrowsrc="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?dw=15&fn=icons/pfeil"):
1240: """generate map link image, text and other stuff"""
1241: id = ob[1]
1242: link = ob[1]
1243: vtype = ob[5]
1244: ctype = ob[3].contentType
1.87 casties 1245: bt = BrowserCheck(self)
1246: tag = ""
1247:
1248: if bt.isN4:
1249: tag += '<layer id="i.%s" onmouseover="highlightPair(\'%s\', true)" onmouseout="highlightPair(\'%s\', false)">'%(id,id,id)
1250: if vtype == "view point":
1251: rot = ob[4][4]
1252: tag += '<a href="%s"><img border="0" src="%s&rot=%s" /></a>'%(link,arrowsrc,rot)
1253: else:
1254: tag += '<a href="%s"><img border="0" width="1000" height="1000" src="trans_img"'%(link)
1255: if ctype == "text-popup":
1256: desc = ob[3].description
1257: tag += ' alt="%s"'%desc
1258: tag += ' /></a>'
1259: tag += '</layer>'
1.74 casties 1260: else:
1.87 casties 1261: tag = '<a id="b.%s" onmouseover="highlightPair(\'%s\', true)" onmouseout="highlightPair(\'%s\', false)" href="%s" target="_blank">'%(id,id,id,link)
1262: if vtype == "view point":
1263: rot = ob[4][4]
1264: if bt.isIEWin and bt.versIE > 5:
1265: 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)
1266: else:
1267: tag += '<img id="i.%s" src="%s&rot=%s" border="1" style="position:absolute; top:-100px; left:-100px; border-style:none;" />'%(id,arrowsrc,rot)
1268: else:
1269: if bt.isIEWin:
1270: tag += '<div id="i.%s" style="position:absolute; top:-100px; left:-100px;background:url(area_img)"'%(id)
1271: else:
1272: tag += '<div id="i.%s" style="position:absolute; top:-100px; left:-100px;"'%(id)
1273: if ctype == "text-popup":
1274: desc = ob[3].description
1275: tag += ' title="%s"'%desc
1276: tag += '> </div>'
1277: tag += '</a>'
1.74 casties 1278: return tag
1279:
1.1 casties 1280:
1281: security.declarePublic('getCreditObject')
1282: def getCreditObject(self,name):
1283: """credit id to credititem"""
1.15 dwinter 1284: try:
1285: return getattr(self.partners,name)
1286: except:
1287: return ""
1.17 dwinter 1288:
1.1 casties 1289: security.declarePublic('ECHO_generateNavBar')
1290: def ECHO_generateNavBar(self):
1291: """Erzeuge Navigationsbar"""
1292: link=""
1293: object="self"
1294: ret=[]
1295: path=self.getPhysicalPath()
1296: for element in path:
1297:
1298:
1299: if not element=="":
1300: object+="."+element
1301:
1302: label=eval(object).label
1303: link+="/"+element
1304: if not label=="":
1305: ret.append((label,link))
1306: return ret
1307:
1308: security.declarePublic('ECHO_rerenderLinksMD')
1.73 dwinter 1309:
1.49 dwinter 1310: def ECHO_rerenderLinksMD(self,obj=None):
1.1 casties 1311: """Rerender all Links"""
1.49 dwinter 1312: if not obj:
1313: obj = self
1.1 casties 1314:
1.49 dwinter 1315: entries=obj.ZopeFind(obj,obj_metatypes=['ECHO_resource','ECHO_collection'])
1316:
1317: for entry in entries:
1318: if entry[1].meta_type == 'ECHO_resource':
1319: entry[1].ECHO_getResourceMD(template="no")
1.91 dwinter 1320:
1.49 dwinter 1321: else:
1322: self.ECHO_rerenderLinksMD(entry[1])
1323:
1.1 casties 1324:
1325:
1326: return "Rerenderd all links to resources in: "+self.title
1.19 dwinter 1327:
1328: security.declarePublic('ECHO_newViewerLink')
1.1 casties 1329:
1330:
1331: def getCoords(self):
1332: try:
1.11 dwinter 1333:
1334: x= [string.join(x,",") for x in self.coords]
1335: return x
1.4 dwinter 1336:
1.11 dwinter 1337: except:
1.4 dwinter 1338:
1.1 casties 1339: return []
1.3 dwinter 1340:
1.34 dwinter 1341: def __init__(self,id,title,label,description,contentType,responsible,credits,weight,sortfield,coords,secondaryLinkTitle,secondaryLink,imageTag="",bgcolour=""):
1.91 dwinter 1342:
1.1 casties 1343:
1344: self.id = id
1345: """Festlegen der ID"""
1346: self.credits=toList(credits)
1347: self.label = label
1348: self.title=title
1349: self.description=description
1.27 dwinter 1350: self.contentType=contentType
1.1 casties 1351: self.responsible=responsible
1.25 dwinter 1352: self.imageTag=imageTag
1.1 casties 1353: self.weight=weight
1354: self.sortfield=sortfield
1355: coordsnew=[ string.split(x,",") for x in coords]
1356: self.coords=coordsnew
1.32 dwinter 1357: self.secondaryLinkTitle=secondaryLinkTitle
1358: self.secondaryLink=secondaryLink
1.35 dwinter 1359: self.bgcolour=bgcolour
1.32 dwinter 1360:
1.1 casties 1361:
1362: manage_options = Folder.manage_options+(
1.13 dwinter 1363: {'label':'Main Config','action':'ECHO_collection_config'},
1.1 casties 1364: {'label':'Rerender Links','action':'ECHO_rerenderLinksMD'},
1365: {'label':'Graphics','action':'ECHO_graphicEntry'},
1.45 dwinter 1366: {'label':'create resources from XML','action':'createRessourcesFromXMLForm'},
1.1 casties 1367:
1368: )
1369:
1.19 dwinter 1370: def getOverview(self):
1371: """overview graphics"""
1.20 dwinter 1372:
1373: return self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['overview'])[0][1]
1374:
1.19 dwinter 1375:
1.1 casties 1376: def ECHO_graphicEntry(self):
1377: """DO nothing"""
1.20 dwinter 1378: overview = self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['overview'])
1.19 dwinter 1379:
1.20 dwinter 1380:
1.19 dwinter 1381: if overview:
1.13 dwinter 1382: pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_draw.zpt').__of__(self)
1.1 casties 1383: return pt()
1384: else:
1385: return "NO OVERVIEW GRAPHICS"
1386:
1.4 dwinter 1387: def ECHO_enterCoords(self,coordstr,angle="",RESPONSE=None):
1.1 casties 1388: """Enter coords"""
1.2 dwinter 1389: coords=self.coords
1.4 dwinter 1390: temco=coordstr.split(",")
1391: temco.append(angle)
1392: coords.append(temco)
1.2 dwinter 1393: self.coords=coords[0:]
1.13 dwinter 1394:
1.2 dwinter 1395: if RESPONSE is not None:
1396: RESPONSE.redirect('ECHO_graphicEntry')
1.1 casties 1397:
1398:
1.13 dwinter 1399: security.declarePublic('ECHO_collection_config')
1400: def ECHO_collection_config(self):
1.1 casties 1401: """Main configuration"""
1402:
1403: if not hasattr(self,'weight'):
1404: self.weight=""
1405:
1406: if not hasattr(self,'sortfield'):
1407: self.sortfield="weight"
1.13 dwinter 1408:
1.1 casties 1409: if not hasattr(self,'coords'):
1410: self.coords=[]
1411:
1.13 dwinter 1412: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_collection.zpt').__of__(self)
1.1 casties 1413: return pt()
1414:
1415:
1.13 dwinter 1416: security.declarePublic('changeECHO_collection')
1.1 casties 1417:
1.10 dwinter 1418:
1.34 dwinter 1419: def getBgcolour(self):
1420: """colour"""
1421: if hasattr(self,'bgcolour') and not (self.bgcolour==""):
1422: return self.bgcolour
1423: else:
1424: return "#dddddd"
1425:
1.69 dwinter 1426: def changeECHO_collection(self,title,label,description,contentType,responsible,weight,secondaryLink,secondaryLinkTitle,credits=None,sortfield="weight",coords=None,RESPONSE=None,imageTag="",bgcolour="",viewClassification=None):
1.71 casties 1427: """Aenderung der Properties"""
1.10 dwinter 1428:
1.32 dwinter 1429: self.secondaryLink=secondaryLink
1430: self.secondaryLinkTitle=secondaryLinkTitle
1.25 dwinter 1431: self.imageTag=imageTag
1.34 dwinter 1432: self.bgcolour=bgcolour
1.69 dwinter 1433: self.viewClassification=viewClassification
1.34 dwinter 1434:
1.32 dwinter 1435: if coords:
1436: coordsnew=[ string.split(x,",") for x in coords]
1437: self.coords=coordsnew[0:]
1438: else:
1439: coordsnew=None
1440: self.coords=None
1441:
1442: setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordsnew)
1.44 dwinter 1443: try:
1444: self.coords=coordsnew[0:] # HACK fehler in setECHO_collection
1445: except:
1446: """none"""
1447:
1.1 casties 1448: self.sortfield=sortfield
1449:
1450: if RESPONSE is not None:
1451: RESPONSE.redirect('manage_main')
1452:
1.23 dwinter 1453:
1454: def showOverview(self):
1455: """overview"""
1456: if 'ECHO_overview.html' in self.__dict__.keys():
1457: return getattr(self,'ECHO_overview.html')()
1458: pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_content_overview.zpt').__of__(self)
1459: return pt()
1460:
1.84 dwinter 1461: security.declareProtected('View','index_html')
1.1 casties 1462:
1463: def index_html(self):
1464: """standard page"""
1465:
1466: if 'index.html' in self.__dict__.keys():
1467: return getattr(self,'index.html')()
1.32 dwinter 1468:
1.1 casties 1469: elif 'overview' in self.__dict__.keys():
1470: return self.showOverview()
1.32 dwinter 1471: elif hasattr(self,'collection_index_template'):
1472: return self.collection_index_template()
1.54 dwinter 1473: elif hasattr(self,'main_index_template'):
1.55 dwinter 1474: return self.main_index_template()
1.1 casties 1475:
1.54 dwinter 1476: pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_main_index_template_standard.zpt').__of__(self)
1.29 dwinter 1477: pt.content_type="text/html"
1.1 casties 1478: return pt()
1479:
1.29 dwinter 1480: def content_html(self):
1481: """template fuer content"""
1482: return content_html(self,'collection')
1483:
1.11 dwinter 1484: def getCredits(self):
1485: """Ausgabe der credits"""
1486: if self.credits:
1487: return self.credits
1488: else:
1489: return []
1.1 casties 1490:
1.65 casties 1491: def area_img(self):
1492: """area image"""
1.88 casties 1493: bt = BrowserCheck(self)
1.89 casties 1494: if bt.isIE or bt.isN4:
1.88 casties 1495: return sendFile(self, 'images/red.gif', 'image/gif')
1496: else:
1497: return sendFile(self, 'images/reda.png', 'image/png')
1.87 casties 1498:
1499: def trans_img(self):
1500: """empty image"""
1501: return sendFile(self, 'images/trans.gif', 'image/gif')
1.65 casties 1502:
1503: def hl_lib_js(self):
1504: """javascript"""
1.79 casties 1505: return sendFile(self, 'js/hl_lib.js', 'text/plain')
1.65 casties 1506:
1507: def js_lib_js(self):
1508: """javascript"""
1.79 casties 1509: return sendFile(self, 'js/js_lib.js', 'text/plain')
1.23 dwinter 1510:
1.1 casties 1511: def getGraphicCoords(self):
1512: """Give list of coordinates"""
1.68 casties 1513: subColTypes=['ECHO_collection','ECHO_resource']
1.1 casties 1514: ids=[]
1.67 casties 1515: for entrySearch in self.ZopeFind(self,obj_metatypes=subColTypes):
1.66 dwinter 1516: object=entrySearch[1]
1517: if hasattr(object,'coords'):
1518: for coordtemp in object.coords:
1519: if len(coordtemp)>3:
1520: coord=coordtemp[0:4]
1521: label=""
1.70 casties 1522: vc=""
1.66 dwinter 1523: if hasattr(object,'label') and not object.label=="":
1524: label=object.label
1525: elif hasattr(object,'title') and not object.title=="":
1526: label=object.title
1527: else:
1528: label=object.getId()
1.70 casties 1529: if object.viewClassification != "":
1530: vc=object.viewClassification
1531: else:
1532: if len(coordtemp) > 4 and coordtemp[4] != "":
1533: vc="view point"
1534: else:
1535: vc="area"
1536: ids.append([string.join(coord,", "),object.getId(),label,object,coordtemp,vc])
1.1 casties 1537: return ids
1538:
1.42 dwinter 1539:
1540:
1541:
1.41 dwinter 1542: getSubCols = ECHO_helpers.getSubCols
1.84 dwinter 1543:
1544: Globals.InitializeClass(ECHO_collection)
1.1 casties 1545:
1.13 dwinter 1546: def manage_addECHO_collectionForm(self):
1547: """Add collection form"""
1548: pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_collectionForm.zpt').__of__(self)
1.1 casties 1549: return pt()
1550:
1551:
1.34 dwinter 1552: 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 1553: """add a echo collection"""
1.1 casties 1554:
1555:
1.34 dwinter 1556: newObj=ECHO_collection(id,title,label,description,contentType,responsible,credits,weight,sortfield,coords,secondaryLinkTitle=secondaryLinkTitle,secondaryLink=secondaryLink,imageTag=imageTag,bgcolour="")
1.1 casties 1557:
1558: self._setObject(id,newObj)
1.13 dwinter 1559:
1.1 casties 1560: if RESPONSE is not None:
1561: RESPONSE.redirect('manage_main')
1562:
1.38 dwinter 1563: class ECHO_group(ECHO_collection):
1564: """ECHO Gruppe"""
1.84 dwinter 1565: security=ClassSecurityInfo()
1.38 dwinter 1566: meta_type="ECHO_group"
1567:
1568: manage_options = Folder.manage_options+(
1569: {'label':'Main Config','action':'ECHO_group_config'},
1570: {'label':'Rerender Links','action':'ECHO_rerenderLinksMD'},
1571: {'label':'Graphics','action':'ECHO_graphicEntry'},
1572: )
1.84 dwinter 1573:
1574: security.declareProtected('View','index_html')
1.52 dwinter 1575: def index_html(self):
1576: """standard page"""
1577: displayedObjects=self.ZopeFind(self,obj_metatypes=displayTypes)
1.61 dwinter 1578: #if (len(displayedObjects)==1) and (displayedObjects[0][1].meta_type=="ECHO_collection"): # nur ein Object dann redirect auf dieses Object
1579: # return self.REQUEST.RESPONSE.redirect(displayedObjects[0][1].absolute_url())
1.52 dwinter 1580:
1581: if 'index.html' in self.__dict__.keys():
1582: return getattr(self,'index.html')()
1.56 dwinter 1583:
1.52 dwinter 1584: elif 'overview' in self.__dict__.keys():
1.56 dwinter 1585: return self.showOverview()
1.52 dwinter 1586: elif hasattr(self,'group_index_template'):
1.56 dwinter 1587: return self.group_index_template()
1588: elif hasattr(self,'collection_index_template'):
1589: return self.collection_index_template()
1.54 dwinter 1590: elif hasattr(self,'main_index_template'):
1.55 dwinter 1591: return self.main_index_template()
1.52 dwinter 1592:
1.54 dwinter 1593: pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_main_index_template_standard.zpt').__of__(self)
1.52 dwinter 1594: pt.content_type="text/html"
1595: return pt()
1596:
1.38 dwinter 1597: def ECHO_group_config(self):
1598: """Main configuration"""
1599:
1600: if not hasattr(self,'weight'):
1601: self.weight=""
1602:
1603: if not hasattr(self,'sortfield'):
1604: self.sortfield="weight"
1605:
1606: if not hasattr(self,'coords'):
1607: self.coords=[]
1608:
1609: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_group.zpt').__of__(self)
1610: return pt()
1611:
1.43 dwinter 1612: def changeECHO_group(self,title,label,description,contentType,responsible,weight,secondaryLink,secondaryLinkTitle,credits=None,sortfield="weight",coords=None,RESPONSE=None,imageTag="",bgcolour="",logo=""):
1.38 dwinter 1613: """Änderung der Properties"""
1614:
1615: self.secondaryLink=secondaryLink
1616: self.secondaryLinkTitle=secondaryLinkTitle
1617: self.imageTag=imageTag
1618: self.bgcolour=bgcolour
1.43 dwinter 1619: self.logo=logo
1620:
1.38 dwinter 1621: if coords:
1622: coordsnew=[ string.split(x,",") for x in coords]
1623: self.coords=coordsnew[0:]
1624: else:
1625: coordsnew=None
1626: self.coords=None
1627:
1628: setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordsnew)
1629:
1630:
1631:
1632: self.sortfield=sortfield
1633:
1634: if RESPONSE is not None:
1635: RESPONSE.redirect('manage_main')
1.40 dwinter 1636:
1637: def getLogo(self):
1638: """logo ausgeben"""
1.43 dwinter 1639: try:
1640: return self.logo
1641: except:
1642: return "ECHO_groups"
1.40 dwinter 1643:
1.38 dwinter 1644: def content_html(self):
1645: """template fuer content"""
1646: return content_html(self,'group')
1647:
1648:
1649:
1650: def manage_addECHO_groupForm(self):
1651: """Add group form"""
1652: pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_groupForm.zpt').__of__(self)
1653: return pt()
1654:
1655:
1.43 dwinter 1656: 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 1657: """add a echo group"""
1658:
1659:
1660: newObj=ECHO_group(id,title,label,description,contentType,responsible,credits,weight,sortfield,coords,secondaryLinkTitle=secondaryLinkTitle,secondaryLink=secondaryLink,imageTag=imageTag,bgcolour="")
1661:
1.43 dwinter 1662: setattr(newObj,'logo',logo)
1.38 dwinter 1663: self._setObject(id,newObj)
1.43 dwinter 1664:
1.38 dwinter 1665: if RESPONSE is not None:
1666: RESPONSE.redirect('manage_main')
1667:
1.84 dwinter 1668: Globals.InitializeClass(ECHO_group)
1.85 dwinter 1669:
1670:
1671: class ECHO_userFolder(UserFolder):
1672: """User folder for Intranet"""
1673: _domain_auth_mode=1 # Identification via domain
1674: meta_type="ECHO_userFolder"
1.38 dwinter 1675:
1.85 dwinter 1676: def authenticate(self, name, password, request):
1677: emergency = self._emergency_user
1678: if name is None:
1679: return None
1680: if emergency and name==emergency.getUserName():
1681: user = emergency
1682: else:
1683: user = self.getUser(name)
1684: if user is not None and user.authenticate(password, request):
1685: return user
1686: else:
1687: return None
1688:
1689: def domainSpecMatch(self,spec, request):
1690: host=''
1691: addr=''
1692:
1693: # Fast exit for the match-all case
1694: if len(spec) == 1 and spec[0] == '*':
1695: return 1
1696:
1697: if request.has_key('REMOTE_HOST'):
1698: host=request['REMOTE_HOST']
1699:
1700: if request.has_key('REMOTE_ADDR'):
1701: addr=request['REMOTE_ADDR']
1702:
1703: if request.has_key('HTTP_X_FORWARDED_FOR'):
1704: addr=request['HTTP_X_FORWARDED_FOR']
1705:
1706:
1707: if not host and not addr:
1708: return 0
1709:
1710: if not host:
1711: try: host=socket.gethostbyaddr(addr)[0]
1712: except: pass
1713: if not addr:
1714: try: addr=socket.gethostbyname(host)
1715: except: pass
1716:
1717:
1718: _host=host.split('.')
1719: _addr=addr.split('.')
1720: _hlen=len(_host)
1721: _alen=len(_addr)
1722:
1723: for ob in spec:
1724: sz=len(ob)
1725: _ob=ob.split('.')
1726: _sz=len(_ob)
1727:
1728: mo = addr_match(ob)
1729: if mo is not None:
1730: if mo.end(0)==sz:
1731: fail=0
1732: for i in range(_sz):
1733: a=_addr[i]
1734: o=_ob[i]
1735: if (o != a) and (o != '*'):
1736: fail=1
1737: break
1738: if fail:
1739: continue
1740: return 1
1741:
1742: mo = host_match(ob)
1743: if mo is not None:
1744: if mo.end(0)==sz:
1745: if _hlen < _sz:
1746: continue
1747: elif _hlen > _sz:
1748: _item=_host[-_sz:]
1749: else:
1750: _item=_host
1751: fail=0
1752: for i in range(_sz):
1753: h=_item[i]
1754: o=_ob[i]
1755: if (o != h) and (o != '*'):
1756: fail=1
1757: break
1758: if fail:
1759: continue
1760: return 1
1761: return 0
1762:
1763: Globals.default__class_init__(ECHO_userFolder)
1764:
1765:
1766:
1767: def manage_addECHO_userFolder(self,dtself=None,REQUEST=None,**ignored):
1768: """add a user folder """
1769: f=ECHO_userFolder()
1770: self=self.this()
1771: try: self._setObject('acl_users', f)
1772: except: return MessageDialog(
1773: title ='Item Exists',
1774: message='This object already contains a User Folder',
1775: action ='%s/manage_main' % REQUEST['URL1'])
1776: self.__allow_groups__=f
1777: if REQUEST is not None:
1778: REQUEST['RESPONSE'].redirect(self.absolute_url()+'/manage_main')
1779:
1780: def manage_addECHO_userFolderForm(self):
1781: """add a user folder form"""
1782: return manage_addECHO_userFolder(self)
1783:
1.1 casties 1784: class ECHO_root(Folder,Persistent,Implicit):
1785: """ECHO Root Folder"""
1.85 dwinter 1786:
1787: security=ClassSecurityInfo()
1788:
1.1 casties 1789: meta_type="ECHO_root"
1.90 dwinter 1790:
1791:
1792: def getBibTag(self,tag,content):
1793: """get field tag für index-meta-generation"""
1794: if not content or content=="":
1795: return ""
1796: ret="<%s>"%tag
1.95 dwinter 1797: #ret+=urllib.quote(content)
1798: ret+=content
1799:
1.90 dwinter 1800: ret+="</%s>"%tag
1801: return ret
1802:
1803: def getValueFromClass(self,field,found):
1804: """retattribute falss existing"""
1805: try:
1.95 dwinter 1806:
1807: return getattr(found,field).decode('ascii','ignore')
1.90 dwinter 1808: except:
1809: return ""
1.49 dwinter 1810:
1811: def getImageTag(self):
1812: """needed by main_template"""
1813: return ""
1814: secondaryLink="" #needed by main_template
1815: secondaryLinkTitle="" #needed by main_template
1816:
1.35 dwinter 1817: def getBgcolour(self):
1818: """hack"""
1819: return "#dddddd"
1.28 dwinter 1820:
1821: def contentTypeSelector_HTML(self,selected=None):
1822: """give type selector"""
1823: if not selected:
1824: retStr="<option selected>\n"
1825: else:
1826: retStr="<option>\n"
1827:
1.62 dwinter 1828: try: # erste version contentTypes exists
1.73 dwinter 1829: for contentType in self.ZopeFind(self.contentTypes,obj_metatypes=["ECHO_contentType","OSAS_MetadataMapping"]):
1.28 dwinter 1830: if selected and (contentType[0]==selected):
1831: retStr+="""<option selected value="%s">%s\n"""%(contentType[0],contentType[0])
1832: else:
1833: retStr+="""<option value="%s">%s\n"""%(contentType[0],contentType[0])
1834: except:
1.62 dwinter 1835: try:
1836: for contentType in self.ZopeFind(self.standardMD,obj_metatypes=["OSAS_MetadataMapping"]):
1837: if selected and (contentType[0]==selected):
1838: retStr+="""<option selected value="%s">%s\n"""%(contentType[0],contentType[0])
1839: else:
1840: retStr+="""<option value="%s">%s\n"""%(contentType[0],contentType[0])
1841: except:
1842: """nothing"""
1843:
1.73 dwinter 1844: return retStr
1845:
1846: def renderingTypeSelector_HTML(self,selected=None):
1847: """give type selector"""
1848: if not selected:
1849: retStr="<option selected>\n"
1850: else:
1851: retStr="<option>\n"
1852:
1853: try: # erste version renderingTypes exists
1854: for renderingType in self.ZopeFind(self.renderingTypes,obj_metatypes=["ECHO_renderingType"]):
1855: if selected and (renderingType[0]==selected):
1856: retStr+="""<option selected value="%s">%s\n"""%(renderingType[0],renderingType[0])
1857: else:
1858: retStr+="""<option value="%s">%s\n"""%(renderingType[0],renderingType[0])
1859: except:
1860: """nothing"""
1861: return retStr
1862:
1863: def renderingTypeSelector_HTML(self,selected=None):
1864: """give type selector"""
1865: if not selected:
1866: retStr="<option selected>\n"
1867: else:
1868: retStr="<option>\n"
1869:
1870: try: # erste version renderingTypes exists
1871: for renderingType in self.ZopeFind(self.renderingTypes,obj_metatypes=["ECHO_renderingType"]):
1872: if selected and (renderingType[0]==selected):
1873: retStr+="""<option selected value="%s">%s\n"""%(renderingType[0],renderingType[0])
1874: else:
1875: retStr+="""<option value="%s">%s\n"""%(renderingType[0],renderingType[0])
1876: except:
1877: """nothing"""
1878: return retStr
1879:
1880:
1881: def copyrightTypeSelector_HTML(self,selected=None):
1882: """give type selector"""
1883: if not selected:
1884: retStr="<option selected>\n"
1885: else:
1886: retStr="<option>\n"
1887:
1888: try: # erste version copyrightTypes exists
1889: for copyrightType in self.ZopeFind(self.copyrightTypes,obj_metatypes=["ECHO_copyrightType"]):
1890: if selected and (copyrightType[0]==selected):
1891: retStr+="""<option selected value="%s">%s\n"""%(copyrightType[0],copyrightType[0])
1892: else:
1893: retStr+="""<option value="%s">%s\n"""%(copyrightType[0],copyrightType[0])
1894: except:
1895: """nothing"""
1896: return retStr
1897:
1.28 dwinter 1898:
1.27 dwinter 1899: def patchContentType(self,obj=None):
1900: """austauschen content_type with contentType (patch bei umstieg von alter Version)"""
1901:
1902:
1903: if not obj:
1904: obj = self
1905:
1.30 dwinter 1906: entries=obj.ZopeFind(obj,obj_metatypes=['ECHO_resource','ECHO_collection','ECHO_externalLink','ECHO_pageTemplate'])
1.27 dwinter 1907:
1908: for entry in entries:
1.31 dwinter 1909: setattr(entry[1],'contentType',entry[1].content_type)
1910: #entry[1].contentType == entry[1].content_type
1.27 dwinter 1911:
1912: if entry[1].meta_type == 'ECHO_collection':
1913: entry[1].patchContentType(entry[1])
1.19 dwinter 1914:
1.27 dwinter 1915:
1.49 dwinter 1916: return "changed all contenttypes in: "+self.title
1.63 dwinter 1917:
1918:
1919: def patchViewClassification(self,obj=None):
1920: """setze viewClassification heuristisch"""
1921:
1922: def checkIfArrow(obj):
1923: if hasattr(obj,'coords'):
1924: for coordtemp in obj.coords:
1.91 dwinter 1925:
1.64 dwinter 1926: if (len(coordtemp)>4) and not (coordtemp[4]==''):
1.63 dwinter 1927: return 4
1928: return None
1929: return None
1930:
1931: if not obj:
1932: obj = self
1933:
1934: entries=obj.ZopeFind(obj,obj_metatypes=['ECHO_resource','ECHO_collection','ECHO_group'])
1935:
1936: for entry in entries:
1937:
1.64 dwinter 1938: if checkIfArrow(entry[1]):
1.63 dwinter 1939: setattr(entry[1],'viewClassification','view point')
1940: else:
1941: setattr(entry[1],'viewClassification','area')
1942:
1943: #entry[1].contentType == entry[1].content_type
1944:
1945: if entry[1].meta_type in ['ECHO_collection','ECHO_group']:
1946: entry[1].patchViewClassification(entry[1])
1947:
1948:
1949: return "changed all contenttypes in: "+self.title
1950:
1.19 dwinter 1951: def ECHO_newViewerLink(self,obj=None):
1952: """change links (:86 faellt weg)"""
1953:
1954: if not obj:
1955: obj = self
1956:
1957: entries=obj.ZopeFind(obj,obj_metatypes=['ECHO_resource','ECHO_collection'])
1958:
1959: for entry in entries:
1960:
1961: if entry[1].meta_type == 'ECHO_resource':
1962:
1963: entry[1].link=re.sub('\:86','',entry[1].link)
1964:
1965: else:
1966:
1967: entry[1].ECHO_newViewerLink(entry[1])
1968:
1969: return "Rerenderd all links to resources in: "+self.title
1.1 casties 1970:
1971: def __init__(self,id,title):
1972: """init"""
1973: self.id = id
1974: self.title=title
1.13 dwinter 1975:
1.14 dwinter 1976: def deleteSpace(self,str):
1977: """delete space at the end of a line"""
1978: if str[len(str)-1]==" ":
1979: return str[0:len(str)-1]
1980: else:
1981: return str
1982:
1983:
1984:
1985: # zusaetliche methoden fuer das vlp muessen in ein eigenes produkt
1986:
1987: def formatAscii(self,str,url=None):
1988: """ersetze ascii umbrueche durch <br>"""
1989: #url=None
1990: if url:
1991:
1992: retStr=""
1993: words=str.split("\n")
1994:
1995: for word in words:
1996: strUrl=url%word
1.91 dwinter 1997:
1.14 dwinter 1998: retStr+="""<a href="%s">%s</a><br/>"""%(strUrl,word)
1999: str=retStr
2000: if str:
2001: return re.sub(r"[\n]","<br/>",str)
2002: else:
2003: return ""
2004:
2005: def link2html(self,str):
2006: """link2html fuer VLP muss hier noch raus"""
2007: if str:
1.91 dwinter 2008:
1.14 dwinter 2009: str=re.sub("\&","&",str)
2010: dom=xml.dom.minidom.parseString("<?xml version='1.0' ?><txt>"+str+"</txt>")
2011: links=dom.getElementsByTagName("link")
2012:
1.91 dwinter 2013:
1.14 dwinter 2014: for link in links:
2015: link.tagName="a"
2016: ref=link.getAttribute("ref")
2017: if self.checkRef(ref):
2018: link.setAttribute("href",self.aq_parent.absolute_url()+"/vlp_coll?id="+ref)
2019:
2020: return dom.toxml('utf-8')
2021: return ""
2022:
2023:
2024: def checkRef(self,ref):
2025: dbs={'vl_literature':'AND CD LIKE \'%lise%\'','vl_technology':'','vl_people':''}
2026: res=None
2027: for db in dbs.keys():
2028:
2029: res=res or self.search(var=str("select reference from %s where reference =\'%s\' %s"%(db,ref,dbs[db])))
2030: return res
2031:
2032: #Ende Methode fuer vlp
2033:
1.13 dwinter 2034: def PgQuoteString(self,string):
2035: """Quote string"""
1.91 dwinter 2036:
1.13 dwinter 2037: return libpq.PgQuoteString(string)
1.1 casties 2038:
2039: def getPartners(self):
2040: """Get list of Partners. Presently only from a subfolder partners"""
1.26 dwinter 2041:
2042: return [ item[1] for item in self.partners.ZopeFind(self.partners,obj_metatypes=['ECHO_partner'])]
1.13 dwinter 2043:
1.1 casties 2044:
1.26 dwinter 2045:
1.1 casties 2046:
1.24 dwinter 2047:
1.26 dwinter 2048: def getPartnersXML(self):
2049: """partner liste als xml"""
2050: partners=self.getPartners()
1.60 dwinter 2051: ret="""<?xml version="1.0" encoding="utf-8" ?>
2052: <partners>"""
2053:
2054: for partner in partners:
2055: ret+="""<partner id="%s" title="%s"/>\n"""%(partner.getId(),unicode(partner.title,'utf-8','replace'))
1.26 dwinter 2056:
2057: return ret+"\n</partners>"
1.24 dwinter 2058:
1.1 casties 2059: def getCollectionTree(self):
2060: """get the collection tree (list of triples (parent,child, depth)"""
2061:
2062: def getCollection(object,depth=0):
2063: depth+=1
2064: collections=[]
2065: for entry in object.__dict__.keys():
2066: element=getattr(object,entry)
2067: try:
2068: if element.meta_type=="ECHO_collection":
2069: collections.append((object,element,depth))
2070: collections+=getCollection(element,depth)
2071: except:
2072: """nothing"""
2073: return collections
2074:
2075:
2076: return getCollection(self)
2077:
2078: def getCollectionTreeIds(self):
2079: """Show the IDs of the Tree"""
2080: ret=[]
2081: for collection in self.getCollectionTree():
2082: ret.append((collection[0].getId(),collection[1].getId(),collection[2]))
2083: return ret
2084:
1.82 dwinter 2085: def getResourcesHTML(self,viewerType=None,filter=None):
2086: """gebe all ressourcen aus"""
1.81 dwinter 2087:
1.82 dwinter 2088: def sortHTML(x,y):
2089: return cmp(x[1].title,y[1].title)
2090:
2091: ret="""<html><body><h2>Resources in ECHO</h3>"""
2092:
2093: resources = self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1)
2094: ret+="""<h3>Found %i resources</h3>"""%len(resources)
2095: resources.sort(sortHTML)
2096: for resource in resources:
2097: echo_url=resource[1].absolute_url()
2098:
2099: if hasattr(resource[1],'title'):
2100: title=resource[1].title
2101: else:
2102: title="None"
2103: if filter:
2104: if re.search(filter,title):
2105: ret+="""\n<p><a href="%s">%s</a></p>"""%(echo_url,title)
2106: else:
2107: ret+="""\n<p><a href="%s">%s</a></p>"""%(echo_url,title)
2108:
2109: ret +="""\n</body></html>"""
2110:
2111: #self.REQUEST.RESPONSE.setHeader("Content-Type", "text/html")
2112: #self.REQUEST.RESPONSE.write(ret)
2113: return ret
2114:
1.81 dwinter 2115: def getResourcesXML(self,viewerType=None,filter=None):
2116: """gebe all ressourcen aus"""
2117: ret="""<?xml version="1.0" ?>
2118: <index>"""
2119: for resource in self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1):
2120:
2121: echo_url=resource[1].absolute_url()
2122: if hasattr(resource[1],'link'):
2123: viewer_url=resource[1].link
2124: else:
2125: viewer_url="NO URL"
2126: if filter:
2127: if re.search(filter,viewer_url):
2128: ret+="""\n<resource echoLink="%s" viewerLink="%s"/>"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(viewer_url,safe='/:?'))
2129: else:
2130: ret+="""\n<resource echoLink="%s" viewerLink="%s"/>"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(viewer_url,safe='/:?'))
2131: ret +="""\n</index>"""
2132:
2133: self.REQUEST.RESPONSE.setHeader("Content-Type", "text/xml")
2134: self.REQUEST.RESPONSE.write(ret)
1.83 dwinter 2135:
2136: def getFullTextsXML(self,viewerType=None,filter=None):
2137: """gebe all ressourcen aus"""
2138: ret="""<?xml version="1.0" ?>
2139: <index>"""
2140: for resource in self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1):
2141:
2142: echo_url=resource[1].absolute_url()
2143: if resource[1].getFullTextXML(noredirect="yes"):
2144: if hasattr(resource[1],'link'):
2145: viewer_url=echo_url+"/getFullTextXML"
2146: else:
2147: viewer_url="NO URL"
2148: if filter:
2149: if re.search(filter,viewer_url):
2150: ret+="""\n<resource echoLink="%s" viewerLink="%s"/>"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(viewer_url,safe='/:?'))
2151: else:
2152: ret+="""\n<resource echoLink="%s" viewerLink="%s"/>"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(viewer_url,safe='/:?'))
2153: ret +="""\n</index>"""
1.90 dwinter 2154:
1.81 dwinter 2155:
1.83 dwinter 2156: self.REQUEST.RESPONSE.setHeader("Content-Type", "text/xml")
2157: self.REQUEST.RESPONSE.write(ret)
1.1 casties 2158:
1.13 dwinter 2159: def manage_addECHO_root(self,id,title,RESPONSE=None):
1.1 casties 2160: """Add an ECHO_root"""
2161: self._setObject(id,ECHO_root(id,title))
2162:
2163: if RESPONSE is not None:
2164: RESPONSE.redirect('manage_main')
2165:
1.13 dwinter 2166: def manage_addECHO_rootForm(self):
1.1 casties 2167: """Nothing yet"""
1.13 dwinter 2168: pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_root.zpt').__of__(self)
1.1 casties 2169: return pt()
1.93 dwinter 2170:
2171: class ECHO_copyrightType(Folder):
2172: """copyright typ"""
2173:
2174: meta_type="ECHO_copyrightType"
2175:
2176: def __init__(self,id,title,label):
2177: """init"""
2178: self.id=id
2179: self.title=title
2180: self.label=label
2181:
2182: manage_options = Folder.manage_options+(
2183: {'label':'Main Config','action':'ECHO_copyrightType_config_mainForm'},
2184: )
2185:
2186: def ECHO_copyrightType_config_mainForm(self):
2187: """change form"""
2188: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_copyrightType').__of__(self)
2189: pt.content_type="text/html"
2190: return pt()
2191:
2192: def ECHO_copyrightType_config_main(self,title,label,RESPONSE=None):
2193: """change"""
2194: self.title=title
2195: self.label=label
2196:
2197: if RESPONSE is not None:
2198: RESPONSE.redirect('manage_main')
2199:
2200: def manage_addECHO_copyrightTypeForm(self):
2201: """Form for adding a ressource"""
2202: pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_copyrightTypeForm.zpt').__of__(self)
2203: return pt()
2204:
2205:
2206: def manage_addECHO_copyrightType(self,id,title,label,RESPONSE=None):
2207: """addaresource"""
2208:
2209: newObj=ECHO_copyrightType(id,title,label)
2210:
2211: self._setObject(id,newObj)
2212:
2213: if RESPONSE is not None:
2214: RESPONSE.redirect('manage_main')
2215:
2216:
1.1 casties 2217:
2218: class ECHO_partner(Image,Persistent):
2219: """ECHO Partner"""
2220:
2221: meta_type="ECHO_partner"
2222:
1.29 dwinter 2223: def __init__(self, id, title,url, file, content_type='', precondition=''):
1.1 casties 2224: self.__name__=id
2225: self.title=title
2226: self.url=url
2227: self.precondition=precondition
2228:
2229: data, size = self._read_data(file)
1.29 dwinter 2230: content_type=self._get_content_type(file, data, id, content_type)
2231: self.update_data(data, content_type, size)
1.1 casties 2232:
2233: manage_options = Image.manage_options+(
2234: {'label':'Partner Information','action':'ECHO_partner_config'},
2235: )
2236:
2237: def changeECHO_partner(self,url,RESPONSE=None):
2238: """Change main information"""
2239: self.url=url
2240: if RESPONSE is not None:
2241: RESPONSE.redirect('manage_main')
2242:
2243:
2244:
2245: def ECHO_partner_config(self):
2246: """Main configuration"""
2247: if not hasattr(self,'url'):
2248: self.url=""
1.13 dwinter 2249: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_partner.zpt').__of__(self)
1.1 casties 2250: return pt()
2251:
2252:
1.13 dwinter 2253: manage_addECHO_partnerForm=DTMLFile('dtml/ECHO_partnerAdd',globals(),
1.1 casties 2254: Kind='ECHO_partner',kind='ECHO_partner')
2255:
2256:
2257:
1.29 dwinter 2258: def manage_addECHO_partner(self, id, file,url, title='', precondition='', content_type='',
1.1 casties 2259: REQUEST=None):
2260: """
2261: Add a new ECHO_partner object.
2262:
2263: Creates a new ECHO_partner object 'id' with the contents of 'file'.
2264: Based on Image.manage_addImage
2265: """
2266:
2267: id=str(id)
2268: title=str(title)
1.29 dwinter 2269: content_type=str(content_type)
1.1 casties 2270: precondition=str(precondition)
2271:
2272: id, title = OFS.Image.cookId(id, title, file)
2273:
2274: self=self.this()
2275:
2276: # First, we create the image without data:
1.29 dwinter 2277: self._setObject(id, ECHO_partner(id,title,url,'',content_type, precondition))
1.1 casties 2278:
2279: # Now we "upload" the data. By doing this in two steps, we
2280: # can use a database trick to make the upload more efficient.
2281: if file:
2282: self._getOb(id).manage_upload(file)
1.29 dwinter 2283: if content_type:
2284: self._getOb(id).content_type=content_type
1.1 casties 2285:
2286: if REQUEST is not None:
2287: try: url=self.DestinationURL()
2288: except: url=REQUEST['URL1']
2289: REQUEST.RESPONSE.redirect('%s/manage_main' % url)
2290: return id
2291:
2292:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>