Annotation of ECHO_content/ECHO_collection.py, revision 1.75
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
22: from Globals import InitializeClass
23: from Globals import DTMLFile
24: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
25: from Products.PageTemplates.PageTemplate import PageTemplate
1.29 dwinter 26: from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
27: from Globals import Persistent, package_home
1.1 casties 28: from Acquisition import Implicit
1.52 dwinter 29: from ECHO_helpers import displayTypes
1.50 dwinter 30: try:
31: from psycopg import libpq
32: except:
33: try:
34: from pyPgSQL import libpq
35: except:
36: print "ECHO_collection: Warning - No libpq imported!"
37:
1.14 dwinter 38: import xml.dom.minidom
1.1 casties 39:
40: import urllib
41: import xml.dom.minidom
1.23 dwinter 42: from ECHO_graphicalOverview import javaHandler,javaScriptMain
1.41 dwinter 43: import ECHO_helpers
1.1 casties 44:
1.6 dwinter 45: #List of different types for the graphical linking viewer
46: viewClassificationListMaster=['view point','area']
47:
1.73 dwinter 48: def checkDiffs(self,metadict):
49: """check differences"""
50:
51: def NoneToEmpty(obj):
52: if obj:
53: return obj
54: else:
55: return ""
56:
57: diffs={}
58: tags=self.findTagsFromMapping(self.contentType)
59: for field in tags[1]:
60: try:
61: if (NoneToEmpty(self.getFieldValue(self.getFieldTag(tags,field)))==metadict[self.getFieldTag(tags,field)]):
62: diffs[self.getFieldTag(tags,field)]=1
63: else:
64: print "DIFF",field,self.getFieldValue(self.getFieldTag(tags,field)),metadict[self.getFieldTag(tags,field)]
65: diffs[self.getFieldTag(tags,field)]=0
66: except:
67: diffs[self.getFieldTag(tags,field)]=0
68: print "EX",field
69: return diffs
70:
1.29 dwinter 71: def content_html(self,type):
72: """template fuer content"""
73: #templates = self.ZopeFind(self.aq_parent,obj_ids=[type+"_template"])
74: #
75: #if templates:
76: # return templates[0][1]()
1.6 dwinter 77:
1.29 dwinter 78: try:
79: obj=getattr(self,type+"_template")
80: return obj()
81: except:
82: pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_%s_template_standard.zpt'%type).__of__(self)
83: pt.content_type="text/html"
84: return pt()
85:
1.1 casties 86: def toList(field):
87: """Einzelfeld in Liste umwandeln"""
88: if type(field)==StringType:
89: return [field]
90: else:
91: return field
92:
93: def getText(nodelist):
94:
95: rc = ""
96: for node in nodelist:
97: if node.nodeType == node.TEXT_NODE:
98: rc = rc + node.data
99: return rc
100:
101:
1.65 casties 102: def sendFile(self, filename, type):
103: """sends an object or a local file (in the product) as response"""
104: paths = filename.split('/')
105: object = self
106: # look for an object called filename
107: for path in paths:
1.75 ! dwinter 108: print "fragment: '"+path+"'"
1.65 casties 109: if hasattr(object, path):
1.75 ! dwinter 110: print " exists"
1.65 casties 111: object = getattr(object, path)
112: else:
1.75 ! dwinter 113: print " doesn't exist"
1.65 casties 114: object = None
115: break
116: if object:
117: # if the object exists then send it
1.75 ! dwinter 118: print "send zope object"+object()
1.65 casties 119: object()
120: else:
121: # send a local file with the given content-type
122: fn = os.path.join(package_home(globals()), filename)
1.75 ! dwinter 123: print "send fs file: "+fn
1.65 casties 124: self.REQUEST.RESPONSE.setHeader("Content-Type", type)
125: self.REQUEST.RESPONSE.write(file(fn).read())
126: return
127:
128:
1.73 dwinter 129: def writeMetadata(url,metadict):
130: """Einlesen der Metadaten und und erstellen des geänderten XML file"""
131:
132: try:
133: geturl=""
134: for line in urllib.urlopen(url).readlines():
135: geturl=geturl+line
136:
137:
138: except:
139: return (None,"Cannot open: "+url)
140:
141: try:
142: dom=xml.dom.minidom.parseString(geturl)
143: except:
144: return (None,"Cannot parse: "+url+"<br>"+geturl)
145:
146: metanodes=dom.getElementsByTagName('bib')
147:
148: if not metanodes:
149: metanodes=dom.getElementsByTagName('archimedes')
150:
151: metanode=metanodes[0]
152:
153: for metaData in metadict.keys():
154: print metaData,metanode
155: try:
156: nodeOld=metanode.getElementsByTagName(metaData)
157: except:
158: nodeOld=None
159:
160: if nodeOld:
161: metanode.removeChild(nodeOld[0]).unlink()
162: else:
163: # try also old writing rule - instead of _:
164: try:
165: nodeOld=metanode.getElementsByTagName(re.sub('_','-',metaData))
166: except:
167: nodeOld=None
168:
169: if nodeOld:
170: metanode.removeChild(nodeOld[0]).unlink()
171:
172: metanodeneu=dom.createElement(metaData)
173: metanodetext=dom.createTextNode(unicode(metadict[metaData],"utf8"))
174: metanodeneu.appendChild(metanodetext)
175: metanode.appendChild(metanodeneu)
176:
177:
178: return dom.toxml().encode('utf-8')
179:
1.1 casties 180: def readMetadata(url):
1.73 dwinter 181: """Methode zum Auslesen der Metadateninformation zu einer Resource
1.1 casties 182: Vorerst noch Typ bib"""
183:
184: metadict={}
185: try:
186: geturl=""
187: for line in urllib.urlopen(url).readlines():
188: geturl=geturl+line
189:
190:
191: except:
192: return (None,"Cannot open: "+url)
193:
194: try:
195: dom=xml.dom.minidom.parseString(geturl)
196: except:
197: return (None,"Cannot parse: "+url+"<br>"+geturl)
198:
199: metanode=dom.getElementsByTagName('bib')
200: metadict['bib_type']='Book'
201: if len(metanode)==0:
202: metanode=dom.getElementsByTagName('archimedes')
203: metadict['bib_type']='Archimedes'
204: #print "HELLO"
205:
206: if not len(metanode)==0:
207: metacontent=metanode[0].childNodes
208:
209: try:
210: metadict['bib_type']=getText(dom.getElementsByTagName('bib')[0].attributes['type'].childNodes)
211: except:
212: """nothing"""
213:
214: for node in metacontent:
215: try:
1.73 dwinter 216: metadict[re.sub('-','_',node.tagName.lower())]=getText(node.childNodes)
1.1 casties 217: except:
218: """nothing"""
219:
1.73 dwinter 220:
1.1 casties 221: return metadict,""
222:
223:
1.27 dwinter 224: def setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordstrs,viewClassification=""):
1.1 casties 225:
226: """Allegemeine Informationen zu einer ECHO Collection"""
227:
1.6 dwinter 228: self.viewClassification=viewClassification
229:
1.1 casties 230: self.label = label
231: self.title=title
232: self.description=description
1.27 dwinter 233: self.contentType=contentType
1.1 casties 234: self.responsible=responsible
235: self.credits=toList(credits)
236: self.weight=weight
237:
1.5 dwinter 238: coords=[]
1.1 casties 239: #coordinates of for rectangles
1.10 dwinter 240:
1.9 dwinter 241: #print "cs", coordstrs
242: if coordstrs:
243: for coordstr in coordstrs:
1.12 dwinter 244: #print "cs", coordstr
1.9 dwinter 245: try:
246: temco=coordstr.split(",")
247: except:
248: temco=[]
249: #temco.append(angle)
250: coords.append(temco)
251:
1.10 dwinter 252:
1.5 dwinter 253: self.coords=coords[0:]
1.1 casties 254:
255:
256: class scientificClassification(SimpleItem,Persistent,Implicit):
1.13 dwinter 257: """outdated will be deleeted in the next versions: subclass"""
1.1 casties 258: security=ClassSecurityInfo()
259:
260: def __init__(self,context,science,practice):
261: self.context=context
262: self.science=science
263: self.practice=practice
264: self.id="scientific_Classification"
265:
266: security.declarePublic('get_context')
267: def get_context(self):
268: return self.context
269:
270: security.declarePublic('get_science')
271: def get_science(self):
272: return self.science
273:
274: security.declarePublic('get_practice')
275: def get_practice(self):
276: return self.practice
277:
278:
279: class scientificInformation(Folder,Persistent,Implicit):
1.13 dwinter 280: """outdated will be deleted in the next versions: subclass scientificInformation"""
1.1 casties 281: security=ClassSecurityInfo()
282:
283:
284:
285: def __init__(self,source_type,period):
286:
287: self.id="scientific_Information"
288: self.source_type=source_type
289: self.period=period
290:
291:
292:
293: security.declarePublic('get_source_type')
294: def get_source_type(self):
295: return self.source_type
296:
297: security.declarePublic('get_period')
298: def get_period(self):
299: return self.period
300:
1.29 dwinter 301: class ECHO_layoutTemplate(ZopePageTemplate):
302: """Create a layout Template for different purposes"""
303:
304: meta_type="ECHO_layoutTemplate"
305:
306: def __init__(self, id, text=None, content_type=None,EchoType=None):
307: self.id = str(id)
308:
309:
310:
311: self.ZBindings_edit(self._default_bindings)
312: if text is None:
313: self._default_content_fn = os.path.join(package_home(globals()),
314: 'zpt/ECHO_%s_template_standard.zpt'%EchoType)
315: text = open(self._default_content_fn).read()
316: self.pt_edit(text, content_type)
317:
1.32 dwinter 318:
1.29 dwinter 319: """change form"""
320:
321:
322: def manage_addECHO_layoutTemplateForm(self):
323: """Form for adding"""
324: pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_layoutTemplate.zpt').__of__(self)
325: return pt()
326:
327: from urllib import quote
328:
329:
330: def manage_addECHO_layoutTemplate(self, EchoType,title=None,REQUEST=None):
331: "Add a Page Template with optional file content."
332: if type(EchoType)==StringType:
333: EchoTypes=[EchoType]
334: else:
335: EchoTypes=EchoType
336:
337: for singleType in EchoTypes:
1.32 dwinter 338:
1.29 dwinter 339: id = str(singleType)+"_template"
340: if REQUEST is None:
341: self._setObject(id, ECHO_layoutTemplate(id, text,EchoType=singleType))
342: ob = getattr(self, id)
343:
344: if title:
345: ob.pt_setTitle(title)
346: return ob
347: else:
348: file = REQUEST.form.get('file')
349: headers = getattr(file, 'headers', None)
350: if headers is None or not file.filename:
351: zpt = ECHO_layoutTemplate(id,EchoType=singleType)
352: else:
353: zpt = ECHO_layoutTemplate(id, file, headers.get('content_type'))
354:
355: self._setObject(id, zpt)
356: ob = getattr(self, id)
357: if title:
358: ob.pt_setTitle(title)
359:
360: try:
361: u = self.DestinationURL()
362: except AttributeError:
363: u = REQUEST['URL1']
364:
365:
366: REQUEST.RESPONSE.redirect(u+'/manage_main')
367: return ''
1.1 casties 368:
369: class ECHO_resource(Folder):
370: """ECHO Ressource"""
371: meta_type='ECHO_resource'
372:
1.6 dwinter 373: viewClassificationList=viewClassificationListMaster
1.1 casties 374:
1.41 dwinter 375: getSubCols = ECHO_helpers.getSubCols
1.48 dwinter 376: def getTitle(self):
377: """title"""
378: return self.title.encode('utf-8')
379:
380: def getLabel(self):
381: """title"""
382: return self.label.encode('utf-8')
1.41 dwinter 383:
1.29 dwinter 384: def content_html(self):
385: """template fuer content"""
386: return content_html(self,'resource')
387:
1.6 dwinter 388: def getViewClassification(self):
389: if hasattr(self,'viewClassification'):
390: return self.viewClassification
391: else:
392: return ""
1.13 dwinter 393:
1.9 dwinter 394: def getCredits(self):
395: """Ausgabe der credits"""
396: if self.credits:
397: return self.credits
398: else:
399: return []
1.6 dwinter 400:
1.27 dwinter 401: def __init__(self,id,link,metalink,title,label,description,contentType,responsible,credits,weight,coords):
1.1 casties 402:
403: self.id = id
404: """Festlegen der ID"""
405:
406: self.label = label
407: self.link= link
408: self.metalink=metalink
409: self.title=title
410: self.weight=weight
411: self.credits=toList(credits)
412: self.description=description
1.27 dwinter 413: self.contentType=contentType
1.1 casties 414: self.responsible=responsible
1.9 dwinter 415:
416: if coords:
417: coordsnew=[ string.split(x,",") for x in coords]
418: else:
419: coordsnew=[]
420:
1.1 casties 421: self.coords=coordsnew
422:
1.3 dwinter 423:
424: def getCoords(self):
1.73 dwinter 425: """gibt coordinaten als String zurück und löscht zugleich einträge die keine Koordinaten sind, letzteres zur korrektur der Eingabe der alten version"""
426: retList=[]
427: if hasattr(self,'coords'):
428: for x in self.coords:
429: if len(x)>1:
430: retList.append(string.join(x,","))
431: return retList
432:
433:
1.3 dwinter 434:
1.49 dwinter 435: def getContentType(self):
436: try:
437: return self.contentType
438: except:
439: return ""
1.1 casties 440:
1.73 dwinter 441: def getCopyrightType(self):
442: try:
443: return self.copyrightType
444: except:
445: return ""
446:
447: def getRenderingType(self):
448: try:
449: return self.renderingType
450: except:
451: return ""
452:
1.1 casties 453: def ECHO_resource_config(self):
454: """Main configuration"""
455:
456: if not hasattr(self,'weight'):
457: self.weight=""
458:
1.13 dwinter 459: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resource.zpt').__of__(self)
1.1 casties 460: return pt()
461:
462:
1.73 dwinter 463: def ECHO_resource_config_main(self):
464: """Main configuration"""
465:
466: if not hasattr(self,'weight'):
467: self.weight=""
468:
469: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resource_main.zpt').__of__(self)
470: return pt()
471:
472: def ECHO_resource_config_coords(self):
473: """Coords configuration """
474:
475: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resource_coords.zpt').__of__(self)
476: return pt()
477:
478: def ECHO_resource_config_credits(self):
479: """Main configuration"""
480:
481: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resource_credits.zpt').__of__(self)
482: return pt()
483:
484: def ECHO_resource_config_metadata(self):
485: """Main configuration"""
486:
487: if (hasattr(self,'metadata')) and not (hasattr(self,'metaDataHash')):
488: self.metaDataHash={}
489: self.contentType=self.bib_type
490: for data in self.metadata:
491: data_neu=re.sub('-','_',data)
492: self.metaDataHash[data_neu]=getattr(self,data)
493: #print data_neu, getattr(self,data)
494: #print self.metaDataHash,self.metadata
495:
496: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resource_metadata.zpt').__of__(self)
497: return pt()
498:
499:
500:
501:
502: def changeECHO_resource_main(self,metalink,link,title,label,description,contentType,renderingType,weight,resourceID,RESPONSE=None):
503: """Änderung der Properties"""
504: self.resourceID=resourceID
505: self.title=title
506: self.label=label
507: self.description=description
508:
509: self.contentType=contentType
510: self.renderingType=renderingType
511: self.weight=weight
512:
513: self.link=link
514: self.metalink=metalink
515:
516: if RESPONSE is not None:
517: RESPONSE.redirect('manage_main')
518:
519:
520: def changeECHO_resource_coords(self,coords,viewClassification,RESPONSE=None):
521: """Änderung der Properties - coords"""
522:
523: try:
524: coordsnew=[ string.split(x,",") for x in coords]
525: except:
526: coordsnew=[]
527:
528: self.coords=coordsnew[0:]
529: self.viewClassification=viewClassification
530:
531: if RESPONSE is not None:
532: RESPONSE.redirect('manage_main')
533:
534: def changeECHO_resource_credits(self,credits,responsible,copyrightType,RESPONSE=None):
535: """Änderung der Properties"""
536: self.credits=credits
537: self.responsible=responsible
538: self.copyrightType=copyrightType
539:
540: if RESPONSE is not None:
541: RESPONSE.redirect('manage_main')
542:
543:
544: def changeECHO_resource_metadata(self,RESPONSE=None):
545: """change metadata"""
546: tags=self.findTagsFromMapping(self.contentType)
1.75 ! dwinter 547: self.OSAS_meta={}
1.73 dwinter 548: for field in tags[1]:
549: try:
550: self.metaDataHash[self.getFieldTag(tags,field)]=self.REQUEST.form[self.getFieldTag(tags,field)]
551: self.OSAS_meta[self.getFieldTag(tags,field)]=self.REQUEST.form['OSAS_%s'%self.getFieldTag(tags,field)]
552: except:
553: """nothing"""
554:
1.75 ! dwinter 555: 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 556:
557: if RESPONSE is not None:
558: RESPONSE.redirect('manage_main')
559:
560:
561: def newMetaXML(self):
1.75 ! dwinter 562: """new index.meta"""
1.73 dwinter 563: self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
564: return writeMetadata(self.metalink,self.OSAS_meta)
565:
566:
1.27 dwinter 567: def changeECHO_resource(self,metalink,link,title,label,description,contentType,responsible,weight,viewClassification="",coords=None,credits=None,RESPONSE=None):
1.1 casties 568: """Änderung der Properties"""
569:
1.33 dwinter 570: try:
571: coordsnew=[ string.split(x,",") for x in coords]
572: except:
573: coordsnew=[]
1.21 dwinter 574:
1.27 dwinter 575: setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordsnew)
1.62 dwinter 576: self.viewClassification=viewClassification
1.21 dwinter 577: self.coords=coordsnew[0:]
1.1 casties 578: self.link=link
579: self.metalink=metalink
580:
581: if RESPONSE is not None:
582: RESPONSE.redirect('manage_main')
583:
584:
585: manage_options = Folder.manage_options+(
1.73 dwinter 586: {'label':'Main Config','action':'ECHO_resource_config_main'},
587: {'label':'Change Credits & Copyright','action':'ECHO_resource_config_credits'},
588: {'label':'Change Metadata','action':'ECHO_resource_config_metadata'},
589: {'label':'Change Coords','action':'ECHO_resource_config_coords'},
590: {'label':'Add coords','action':'ECHO_graphicEntry'},
591: {'label':'Sync Metadata','action':'ECHO_getResourceMD'},
592: )
1.1 casties 593:
1.20 dwinter 594: def getOverview(self):
595: """overview graphics"""
596:
597: return self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['overview'])[0][1]
598:
1.3 dwinter 599: def ECHO_graphicEntry(self):
600: """DO nothing"""
1.20 dwinter 601: overview = self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['overview'])
1.19 dwinter 602: if overview:
1.13 dwinter 603: pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_draw.zpt').__of__(self)
1.3 dwinter 604: return pt()
605: else:
606: return "NO OVERVIEW GRAPHICS"
607:
1.4 dwinter 608: def ECHO_enterCoords(self,coordstr,angle="",RESPONSE=None):
1.3 dwinter 609: """Enter coords"""
610: coords=self.coords
1.4 dwinter 611: temco=coordstr.split(",")
612: temco.append(angle)
613: coords.append(temco)
614:
1.3 dwinter 615: self.coords=coords[0:]
1.13 dwinter 616:
1.3 dwinter 617: if RESPONSE is not None:
618: RESPONSE.redirect('ECHO_graphicEntry')
619:
1.73 dwinter 620:
621: def isDefinedInThisSet(self,fields,field):
622: """checks if field is defined in fields"""
623: if (fields[0].has_key(field)) and not (fields[0][field]==""):
624: return 1
625: else:
626:
627: return 0
628:
629: def getFieldLabel(self,fields,field):
630: """get labels"""
631: try:
632: ret =fields[0][field]
633: if ret == "":
634: return field
635: else:
636: return ret
637: except:
638: return field
639:
640:
641:
642: def getFieldTag(self,fields,field):
643: """get labels"""
644: try:
645: ret =fields[0][field]
646: if ret == "":
647: return field
648: else:
649: return ret
650: except:
651: return field
652:
653:
654:
655: def getFieldValue(self,field):
656: """get value"""
657: #print field
658: try:
659:
660: ret=self.metaDataHash[field]
661: if ret == "":
662: return None
663: else:
664: return ret
665: except:
666: return None
667:
668: def findLabelsFromMapping(self,referenceType):
669: """gib hash mit label -> generic zurueck"""
670: self.referencetypes=self.ZopeFind(self.standardMD)
671: #print "RT",referenceType
672:
673: bibdata={}
674: retdata={}
675: fieldlist=self.standardMD.fieldList
676:
677: for referenceTypeF in self.referencetypes:
678: #print referenceTypeF[1].title,referenceType
679: if referenceTypeF[1].title == referenceType:
680: #print "OK"
681: bibdata[referenceTypeF[1].title]=referenceTypeF[1].fields
682: bibdata['data']=referenceTypeF[1]
683: self.fields=bibdata[referenceType]
684: for field in fieldlist:
685: retdata[field]=referenceTypeF[1].getValue(field)[1]
686: #print retdata,fieldlist
687: return retdata,fieldlist
688:
689: def findTagsFromMapping(self,referenceType):
690: """gib hash mit label -> generic zurueck"""
691: self.referencetypes=self.ZopeFind(self.standardMD)
692:
693:
694: bibdata={}
695: retdata={}
696: fieldlist=self.standardMD.fieldList
697:
698: for referenceTypeF in self.referencetypes:
699:
700: if referenceTypeF[1].title == referenceType:
701: bibdata[referenceTypeF[1].title]=referenceTypeF[1].fields
702: bibdata['data']=referenceTypeF[1]
703: self.fields=bibdata[referenceType]
704: for field in fieldlist:
705: retdata[field]=referenceTypeF[1].getValue(field)[0]
706:
707: return retdata,fieldlist
708:
709:
710:
711:
1.1 casties 712: def ECHO_getResourceMD(self,template="yes"):
713: """Einlesen der Metadaten und Anlegen dieser Metadaten als Informationen zur Resource"""
714: (metadict, error)=readMetadata(self.metalink)
715:
1.13 dwinter 716:
1.1 casties 717:
718: if not error=="": #Fehler beim Auslesen des Metafiles
1.73 dwinter 719: return "ERROR:",error
720:
721:
722: if not (metadict['bib_type']==self.contentType):
723: self.REQUEST.SESSION['contentStorage']=metadict['bib_type']
724: self.REQUEST.SESSION['contentZope']=self.contentType
1.1 casties 725:
1.73 dwinter 726: return PageTemplateFile('Products/ECHO_content/zpt/ECHO_getResourceMDErrorContentType.zpt').__of__(self)()
727:
728: self.REQUEST.SESSION['metadict']=metadict
1.1 casties 729:
1.73 dwinter 730: self.REQUEST.SESSION['diffs']=checkDiffs(self,metadict)
1.13 dwinter 731:
1.73 dwinter 732:
1.1 casties 733: if template=="yes":
1.13 dwinter 734: pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_resourceMD.zpt').__of__(self)
1.1 casties 735: return pt()
1.73 dwinter 736:
737:
738:
1.1 casties 739:
740: def ECHO_getMD(self,item):
741: """Ausgabe der MD"""
742: return getattr(self,item)
743:
744: def index_html(self):
745: """standard page"""
746:
747: return self.REQUEST.RESPONSE.redirect(self.link)
748:
749: def generate_label(self):
750: """Erzeugt_standard_Label aus Template"""
751: pt=getattr(self,"label_template_"+self.bib_type)
1.13 dwinter 752:
1.1 casties 753: return pt()
754:
1.13 dwinter 755: def manage_addECHO_resourceForm(self):
756: """Form for adding a ressource"""
757: pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_resourceForm.zpt').__of__(self)
1.1 casties 758: return pt()
759:
760:
1.10 dwinter 761:
1.27 dwinter 762: def manage_addECHO_resource(self,id,title,label,description,contentType,responsible,link,metalink,weight,credits=None,coords=None,RESPONSE=None):
1.13 dwinter 763: """addaresource"""
1.1 casties 764:
1.27 dwinter 765: newObj=ECHO_resource(id,link,metalink,title,label,description,contentType,responsible,credits,weight,coords)
1.1 casties 766:
767: self._setObject(id,newObj)
1.13 dwinter 768:
1.1 casties 769: if RESPONSE is not None:
770: RESPONSE.redirect('manage_main')
771:
772:
773: class ECHO_externalLink(Folder):
774: """Link zu einer externen Ressource"""
775: security=ClassSecurityInfo()
776: meta_type='ECHO_externalLink'
777:
1.48 dwinter 778: def getTitle(self):
779: """title"""
780: return self.title.encode('utf-8')
781:
782: def getLabel(self):
783: """title"""
784: return self.label.encode('utf-8')
785:
1.29 dwinter 786: def content_html(self):
787: """template fuer content"""
788: return content_html(self,'externalLink')
789:
1.27 dwinter 790: def __init__(self,id,link,title,label,description,contentType,responsible,credits,weight,coords):
1.1 casties 791:
792: self.id = id
793: """Festlegen der ID"""
794:
795: self.credits=toList(credits)
796: self.label = label
797: self.link= link
798: self.title=title
799: self.weight=weight
800: self.description=description
1.27 dwinter 801: self.contentType=contentType
1.1 casties 802: self.responsible=responsible
803: coordsnew=[ string.split(x,",") for x in coords]
804: self.coords=coordsnew
805:
806: def ECHO_externalLink_config(self):
807: """Main configuration"""
808:
809: if not hasattr(self,'weight'):
810: self.weight=""
811: if not hasattr(self,'coords'):
1.9 dwinter 812:
1.1 casties 813: self.coords=['']
1.12 dwinter 814: #print "G",self.coords
1.1 casties 815:
1.13 dwinter 816: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_externalLink.zpt').__of__(self)
1.1 casties 817: return pt()
818:
819:
1.37 dwinter 820: def changeECHO_externalLink(self,link,title,label,description,contentType,responsible,weight,coords=None,credits=None,RESPONSE=None):
1.1 casties 821:
822: """Änderung der Properties"""
1.36 dwinter 823: try:
824: coordsnew=[ string.split(x,",") for x in coords]
825: except:
826: coordsnew=[]
1.1 casties 827:
1.27 dwinter 828: setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coords)
1.1 casties 829:
1.21 dwinter 830: self.coords=coordsnew[0:]
1.1 casties 831: self.link=link
832: if RESPONSE is not None:
833: RESPONSE.redirect('manage_main')
834:
835:
836: manage_options = Folder.manage_options+(
837: {'label':'Main Config','action':'ECHO_externalLink_config'},
838: )
1.17 dwinter 839:
840: def getCredits(self):
841: """Ausgabe der credits"""
842: if self.credits:
843: return self.credits
844: else:
845: return []
846:
1.1 casties 847: def index_html(self):
848: """standard page"""
849:
850: return self.REQUEST.RESPONSE.redirect(self.link)
851:
1.13 dwinter 852: def manage_addECHO_externalLinkForm(self):
853: """Form for external Links"""
854: pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_externalLinkForm.zpt').__of__(self)
1.1 casties 855: return pt()
856:
857:
1.27 dwinter 858: def manage_addECHO_externalLink(self,id,title,label,description,contentType,responsible,link,weight,coords=None,credits=None,RESPONSE=None):
1.13 dwinter 859: """Add an external Link"""
1.1 casties 860:
1.27 dwinter 861: newObj=ECHO_externalLink(id,link,title,label,description,contentType,responsible,credits,weight,coords)
1.1 casties 862:
863: self._setObject(id,newObj)
1.13 dwinter 864:
1.1 casties 865: if RESPONSE is not None:
866: RESPONSE.redirect('manage_main')
867:
1.24 dwinter 868:
1.51 dwinter 869: class ECHO_link(ECHO_externalLink):
870: """external_link"""
871:
872: meta_type="ECHO_link"
873:
874:
1.53 dwinter 875: def content_html(self):
876: """template fuer content"""
877: return content_html(self,'link')
878:
1.51 dwinter 879: def manage_addECHO_linkForm(self):
880: """Form for external Links"""
881: pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_linkForm.zpt').__of__(self)
882: return pt()
883:
884:
885: def manage_addECHO_link(self,id,title,label,description,contentType,responsible,link,weight,coords=None,credits=None,RESPONSE=None):
886: """Add an external Link"""
887:
888: newObj=ECHO_link(id,link,title,label,description,contentType,responsible,credits,weight,coords)
889:
890: self._setObject(id,newObj)
891:
892: if RESPONSE is not None:
893: RESPONSE.redirect('manage_main')
894:
1.24 dwinter 895:
1.1 casties 896: class ECHO_collection(Folder, Persistent, Implicit):
897: """ECHO Collection"""
898: security=ClassSecurityInfo()
899: meta_type='ECHO_collection'
1.69 dwinter 900: viewClassificationList=viewClassificationListMaster
901: displayTypes=displayTypes
902:
903: def getViewClassification(self):
904: if hasattr(self,'viewClassification'):
905: return self.viewClassification
906: else:
907: return ""
1.48 dwinter 908:
909: def getTitle(self):
910: """title"""
911: return self.title.encode('utf-8')
912:
913: def getLabel(self):
914: """title"""
915: return self.label.encode('utf-8')
1.1 casties 916:
1.45 dwinter 917: def createRessourcesFromXMLForm(self):
918: """form"""
919: pt=PageTemplateFile('Products/ECHO_content/zpt/createRessourcesFromXMLForm.zpt').__of__(self)
920: return pt()
921: def createRessourcesFromXML(self,fileupload):
922: """read an XML file for generating resources"""
923: dom=xml.dom.minidom.parse(fileupload)
924: ret="<h2>Added</h2>"
925: for resource in dom.getElementsByTagName('resource'):
926: link=getText(resource.getElementsByTagName('link')[0].childNodes)
927: label=getText(resource.getElementsByTagName('label')[0].childNodes)
928: #splitted=link.split("?")[0].split("/")
929: #id=splitted[len(splitted)-1].encode('ascii')
930: id=re.sub(" ","_",label).encode('ascii')
931:
932: ret+="<p>"+label+"</p>"
1.46 dwinter 933: manage_addECHO_resource(self,id,label.encode('ascii'),label.encode('ascii'),"","","",link.encode('ascii'),"","")
1.45 dwinter 934: return ret
1.25 dwinter 935: def getImageTag(self):
936: """GetTag"""
937: try:
938: return self.imageTag
939: except:
940: return ""
941:
1.27 dwinter 942: def addResource(self,id,title,label,description,contentType,responsible,link,metalink,weight,credits=None,coords=None,RESPONSE=None):
1.24 dwinter 943: """SSS"""
944: try:
1.27 dwinter 945: manage_addECHO_resource(self,id,title,label,description,contentType,responsible,link,metalink,weight,credits=None,coords=None,RESPONSE=None)
1.24 dwinter 946: return "done"
947: except:
948: return None
1.32 dwinter 949:
950: def getSecondaryLink(self):
951: """secondary link"""
952: try:
953: return self.secondaryLink
954: except:
955: return ""
956:
957: def getSecondaryLinkTitle(self):
958: """secondary link"""
959: try:
960: return self.secondaryLinkTitle
961: except:
962: return ""
963:
1.24 dwinter 964: def getCollectionTreeXML(self):
965: """Tree as XML"""
966:
967: def getCollection(object,depth=0):
968: depth+=1
969: collections=""
970: for entry in object.__dict__.keys():
971: element=getattr(object,entry)
972: try:
1.40 dwinter 973: if element.meta_type in ["ECHO_collection","ECHO_group"]:
1.60 dwinter 974: collections+="<element name=\""+quote(element.title)+"\" url=\""+element.absolute_url()+"\">"
1.24 dwinter 975: collections+=getCollection(element,depth)+"</element>\n"
976: except:
977: """nothing"""
978: return collections
979:
1.60 dwinter 980: ret="""<?xml version="1.0" encoding="utf-8" ?>"""
981: return ret+"<collection>"+getCollection(self)+"</collection>"
1.24 dwinter 982:
1.23 dwinter 983: def createJavaScript(self):
984: """CreateJava"""
1.72 casties 985: ret=javaScriptMain
1.23 dwinter 986:
1.65 casties 987: dynamical="\n"
1.23 dwinter 988: for ob in self.getGraphicCoords():
1.47 casties 989: if ob[4][4] == "":
1.72 casties 990: dynamical+="""Coords.push(new Coord('%s', Img, %s));\n"""%(ob[1],ob[0])
991: else:
992: dynamical+="""Coords.push(new Coord('%s', Img, %s));//%s\n"""%(ob[1],ob[0],ob[4][4])
993: dynamical+="ShowArrow(new getObj('i.%s'),Img,%s);\n"%(ob[1],ob[0])
994: ret+=javaHandler%dynamical
995: return ret
996:
997: def createJSAreas(self):
1.74 casties 998: """new version of createJavaScript"""
1.72 casties 999: dynamical="\n"
1000: for ob in self.getGraphicCoords():
1.74 casties 1001: if ob[5] == "area":
1.65 casties 1002: dynamical+="""addArea('%s', 'overview', %s, 'area');\n"""%(ob[1],ob[0])
1.47 casties 1003: else:
1.65 casties 1004: dynamical+="""addArea('%s', 'overview', %s, 'arrow');\n"""%(ob[1],ob[0])
1.72 casties 1005: return dynamical
1.74 casties 1006:
1007: def createMapHead(self):
1008: """generate divs"""
1009: pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt/ECHO_content_map_frag_js')).__of__(self)
1010: return pt()
1011:
1012: def createMapLink(self, ob, text=None):
1013: """generate map link"""
1014: id = ob[1]
1015: link = ob[1]
1016: if text == None:
1017: text = ob[2]
1018: tag = '<a id="a.%s" onmouseover="highlightPair(\'%s\', true)" onmouseout="highlightPair(\'%s\', false)" href="%s" target="_blank"'%(id,id,id,link)
1019: if ob[3].contentType == 'text-popup':
1020: tag += ' title="%s"'%ob[3].description
1021: tag += ">" + text + "</a>"
1022: return tag
1023:
1024: def createMapAux(self, ob, arrowsrc="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?dw=15&fn=icons/pfeil"):
1025: """generate map link image, text and other stuff"""
1026: id = ob[1]
1027: link = ob[1]
1028: vtype = ob[5]
1029: ctype = ob[3].contentType
1030:
1031: tag = '<a id="b.%s" onmouseover="highlightPair(\'%s\', true)" onmouseout="highlightPair(\'%s\', false)" href="%s" target="_blank">'%(id,id,id,link)
1032: if vtype == "view point":
1033: rot = ob[4][4]
1034: tag += '<img id="i.%s" src="%s&rot=%s" border="1" style="position:absolute; top:-100px; left:-100px; border-style:none" />'%(id,arrowsrc,rot)
1035: else:
1036: tag += '<span id="i.%s" style="position:absolute; top:-100px; left:-100px; border-style:none"'%(id)
1037: if ctype == "text-popup":
1038: desc = ob[3].description
1039: tag += ' title="%s"'%desc
1040: tag += ' />'
1041: tag += '</a>'
1042: return tag
1043:
1.1 casties 1044:
1045: security.declarePublic('getCreditObject')
1046: def getCreditObject(self,name):
1047: """credit id to credititem"""
1.15 dwinter 1048: try:
1049: return getattr(self.partners,name)
1050: except:
1051: return ""
1.17 dwinter 1052:
1.1 casties 1053: security.declarePublic('ECHO_generateNavBar')
1054: def ECHO_generateNavBar(self):
1055: """Erzeuge Navigationsbar"""
1056: link=""
1057: object="self"
1058: ret=[]
1059: path=self.getPhysicalPath()
1060: for element in path:
1061:
1062:
1063: if not element=="":
1064: object+="."+element
1065:
1066: label=eval(object).label
1067: link+="/"+element
1068: if not label=="":
1069: ret.append((label,link))
1070: return ret
1071:
1072: security.declarePublic('ECHO_rerenderLinksMD')
1.73 dwinter 1073:
1.49 dwinter 1074: def ECHO_rerenderLinksMD(self,obj=None):
1.1 casties 1075: """Rerender all Links"""
1.49 dwinter 1076: if not obj:
1077: obj = self
1.1 casties 1078:
1.49 dwinter 1079: entries=obj.ZopeFind(obj,obj_metatypes=['ECHO_resource','ECHO_collection'])
1080:
1081: for entry in entries:
1082: if entry[1].meta_type == 'ECHO_resource':
1083: entry[1].ECHO_getResourceMD(template="no")
1.73 dwinter 1084: #print "rerender",entry[1].getId()
1.49 dwinter 1085: else:
1086: self.ECHO_rerenderLinksMD(entry[1])
1087:
1.1 casties 1088:
1089:
1090: return "Rerenderd all links to resources in: "+self.title
1.19 dwinter 1091:
1092: security.declarePublic('ECHO_newViewerLink')
1.1 casties 1093:
1094:
1095: def getCoords(self):
1096: try:
1.11 dwinter 1097:
1098: x= [string.join(x,",") for x in self.coords]
1099: return x
1.4 dwinter 1100:
1.11 dwinter 1101: except:
1.4 dwinter 1102:
1.1 casties 1103: return []
1.3 dwinter 1104:
1.34 dwinter 1105: def __init__(self,id,title,label,description,contentType,responsible,credits,weight,sortfield,coords,secondaryLinkTitle,secondaryLink,imageTag="",bgcolour=""):
1.9 dwinter 1106: #print "CO",coords
1.1 casties 1107:
1108: self.id = id
1109: """Festlegen der ID"""
1110: self.credits=toList(credits)
1111: self.label = label
1112: self.title=title
1113: self.description=description
1.27 dwinter 1114: self.contentType=contentType
1.1 casties 1115: self.responsible=responsible
1.25 dwinter 1116: self.imageTag=imageTag
1.1 casties 1117: self.weight=weight
1118: self.sortfield=sortfield
1119: coordsnew=[ string.split(x,",") for x in coords]
1120: self.coords=coordsnew
1.32 dwinter 1121: self.secondaryLinkTitle=secondaryLinkTitle
1122: self.secondaryLink=secondaryLink
1.35 dwinter 1123: self.bgcolour=bgcolour
1.32 dwinter 1124:
1.1 casties 1125:
1126: manage_options = Folder.manage_options+(
1.13 dwinter 1127: {'label':'Main Config','action':'ECHO_collection_config'},
1.1 casties 1128: {'label':'Rerender Links','action':'ECHO_rerenderLinksMD'},
1129: {'label':'Graphics','action':'ECHO_graphicEntry'},
1.45 dwinter 1130: {'label':'create resources from XML','action':'createRessourcesFromXMLForm'},
1.1 casties 1131:
1132: )
1133:
1.19 dwinter 1134: def getOverview(self):
1135: """overview graphics"""
1.20 dwinter 1136:
1137: return self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['overview'])[0][1]
1138:
1.19 dwinter 1139:
1.1 casties 1140: def ECHO_graphicEntry(self):
1141: """DO nothing"""
1.20 dwinter 1142: overview = self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['overview'])
1.19 dwinter 1143:
1.20 dwinter 1144:
1.19 dwinter 1145: if overview:
1.13 dwinter 1146: pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_draw.zpt').__of__(self)
1.1 casties 1147: return pt()
1148: else:
1149: return "NO OVERVIEW GRAPHICS"
1150:
1.4 dwinter 1151: def ECHO_enterCoords(self,coordstr,angle="",RESPONSE=None):
1.1 casties 1152: """Enter coords"""
1.2 dwinter 1153: coords=self.coords
1.4 dwinter 1154: temco=coordstr.split(",")
1155: temco.append(angle)
1156: coords.append(temco)
1.2 dwinter 1157: self.coords=coords[0:]
1.13 dwinter 1158:
1.2 dwinter 1159: if RESPONSE is not None:
1160: RESPONSE.redirect('ECHO_graphicEntry')
1.1 casties 1161:
1162:
1.13 dwinter 1163: security.declarePublic('ECHO_collection_config')
1164: def ECHO_collection_config(self):
1.1 casties 1165: """Main configuration"""
1166:
1167: if not hasattr(self,'weight'):
1168: self.weight=""
1169:
1170: if not hasattr(self,'sortfield'):
1171: self.sortfield="weight"
1.13 dwinter 1172:
1.1 casties 1173: if not hasattr(self,'coords'):
1174: self.coords=[]
1175:
1.13 dwinter 1176: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_collection.zpt').__of__(self)
1.1 casties 1177: return pt()
1178:
1179:
1.13 dwinter 1180: security.declarePublic('changeECHO_collection')
1.1 casties 1181:
1.10 dwinter 1182:
1.34 dwinter 1183: def getBgcolour(self):
1184: """colour"""
1185: if hasattr(self,'bgcolour') and not (self.bgcolour==""):
1186: return self.bgcolour
1187: else:
1188: return "#dddddd"
1189:
1.69 dwinter 1190: 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 1191: """Aenderung der Properties"""
1.10 dwinter 1192:
1.32 dwinter 1193: self.secondaryLink=secondaryLink
1194: self.secondaryLinkTitle=secondaryLinkTitle
1.25 dwinter 1195: self.imageTag=imageTag
1.34 dwinter 1196: self.bgcolour=bgcolour
1.69 dwinter 1197: self.viewClassification=viewClassification
1.34 dwinter 1198:
1.32 dwinter 1199: if coords:
1200: coordsnew=[ string.split(x,",") for x in coords]
1201: self.coords=coordsnew[0:]
1202: else:
1203: coordsnew=None
1204: self.coords=None
1205:
1206: setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordsnew)
1.44 dwinter 1207: try:
1208: self.coords=coordsnew[0:] # HACK fehler in setECHO_collection
1209: except:
1210: """none"""
1211:
1.1 casties 1212: self.sortfield=sortfield
1213:
1214: if RESPONSE is not None:
1215: RESPONSE.redirect('manage_main')
1216:
1217: security.declarePublic('index_html')
1218:
1.23 dwinter 1219:
1220: def showOverview(self):
1221: """overview"""
1222: if 'ECHO_overview.html' in self.__dict__.keys():
1223: return getattr(self,'ECHO_overview.html')()
1224: pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_content_overview.zpt').__of__(self)
1225: return pt()
1226:
1.1 casties 1227:
1228: def index_html(self):
1229: """standard page"""
1230:
1231: if 'index.html' in self.__dict__.keys():
1232: return getattr(self,'index.html')()
1.32 dwinter 1233:
1.1 casties 1234: elif 'overview' in self.__dict__.keys():
1235: return self.showOverview()
1.32 dwinter 1236: elif hasattr(self,'collection_index_template'):
1237: return self.collection_index_template()
1.54 dwinter 1238: elif hasattr(self,'main_index_template'):
1.55 dwinter 1239: return self.main_index_template()
1.1 casties 1240:
1.54 dwinter 1241: pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_main_index_template_standard.zpt').__of__(self)
1.29 dwinter 1242: pt.content_type="text/html"
1.1 casties 1243: return pt()
1244:
1.29 dwinter 1245: def content_html(self):
1246: """template fuer content"""
1247: return content_html(self,'collection')
1248:
1.11 dwinter 1249: def getCredits(self):
1250: """Ausgabe der credits"""
1251: if self.credits:
1252: return self.credits
1253: else:
1254: return []
1.1 casties 1255:
1.65 casties 1256: def area_img(self):
1257: """area image"""
1258: sendFile(self, 'images/red.gif', 'image/gif')
1259: return
1260:
1261: def hl_lib_js(self):
1262: """javascript"""
1263: sendFile(self, 'js/hl_lib.js', 'text/plain')
1264: return
1265:
1266: def js_lib_js(self):
1267: """javascript"""
1268: sendFile(self, 'js/js_lib.js', 'text/plain')
1269: return
1.23 dwinter 1270:
1.1 casties 1271: def getGraphicCoords(self):
1272: """Give list of coordinates"""
1.68 casties 1273: subColTypes=['ECHO_collection','ECHO_resource']
1.1 casties 1274: ids=[]
1.67 casties 1275: for entrySearch in self.ZopeFind(self,obj_metatypes=subColTypes):
1.66 dwinter 1276: object=entrySearch[1]
1277: if hasattr(object,'coords'):
1278: for coordtemp in object.coords:
1279: if len(coordtemp)>3:
1280: coord=coordtemp[0:4]
1281: label=""
1.70 casties 1282: vc=""
1.66 dwinter 1283: if hasattr(object,'label') and not object.label=="":
1284: label=object.label
1285: elif hasattr(object,'title') and not object.title=="":
1286: label=object.title
1287: else:
1288: label=object.getId()
1.70 casties 1289: if object.viewClassification != "":
1290: vc=object.viewClassification
1291: else:
1292: if len(coordtemp) > 4 and coordtemp[4] != "":
1293: vc="view point"
1294: else:
1295: vc="area"
1296: ids.append([string.join(coord,", "),object.getId(),label,object,coordtemp,vc])
1.1 casties 1297: return ids
1298:
1.42 dwinter 1299:
1300:
1301:
1.41 dwinter 1302: getSubCols = ECHO_helpers.getSubCols
1.1 casties 1303:
1304:
1305:
1306:
1.13 dwinter 1307: def manage_addECHO_collectionForm(self):
1308: """Add collection form"""
1309: pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_collectionForm.zpt').__of__(self)
1.1 casties 1310: return pt()
1311:
1312:
1.34 dwinter 1313: 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 1314: """add a echo collection"""
1.1 casties 1315:
1316:
1.34 dwinter 1317: newObj=ECHO_collection(id,title,label,description,contentType,responsible,credits,weight,sortfield,coords,secondaryLinkTitle=secondaryLinkTitle,secondaryLink=secondaryLink,imageTag=imageTag,bgcolour="")
1.1 casties 1318:
1319: self._setObject(id,newObj)
1.13 dwinter 1320:
1.1 casties 1321: if RESPONSE is not None:
1322: RESPONSE.redirect('manage_main')
1323:
1.38 dwinter 1324: class ECHO_group(ECHO_collection):
1325: """ECHO Gruppe"""
1326: meta_type="ECHO_group"
1327:
1328: manage_options = Folder.manage_options+(
1329: {'label':'Main Config','action':'ECHO_group_config'},
1330: {'label':'Rerender Links','action':'ECHO_rerenderLinksMD'},
1331: {'label':'Graphics','action':'ECHO_graphicEntry'},
1332: )
1.52 dwinter 1333:
1334: def index_html(self):
1335: """standard page"""
1336: displayedObjects=self.ZopeFind(self,obj_metatypes=displayTypes)
1.61 dwinter 1337: #if (len(displayedObjects)==1) and (displayedObjects[0][1].meta_type=="ECHO_collection"): # nur ein Object dann redirect auf dieses Object
1338: # return self.REQUEST.RESPONSE.redirect(displayedObjects[0][1].absolute_url())
1.52 dwinter 1339:
1340: if 'index.html' in self.__dict__.keys():
1341: return getattr(self,'index.html')()
1.56 dwinter 1342:
1.52 dwinter 1343: elif 'overview' in self.__dict__.keys():
1.56 dwinter 1344: return self.showOverview()
1.52 dwinter 1345: elif hasattr(self,'group_index_template'):
1.56 dwinter 1346: return self.group_index_template()
1347: elif hasattr(self,'collection_index_template'):
1348: return self.collection_index_template()
1.54 dwinter 1349: elif hasattr(self,'main_index_template'):
1.55 dwinter 1350: return self.main_index_template()
1.52 dwinter 1351:
1.54 dwinter 1352: pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_main_index_template_standard.zpt').__of__(self)
1.52 dwinter 1353: pt.content_type="text/html"
1354: return pt()
1355:
1.38 dwinter 1356: def ECHO_group_config(self):
1357: """Main configuration"""
1358:
1359: if not hasattr(self,'weight'):
1360: self.weight=""
1361:
1362: if not hasattr(self,'sortfield'):
1363: self.sortfield="weight"
1364:
1365: if not hasattr(self,'coords'):
1366: self.coords=[]
1367:
1368: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_group.zpt').__of__(self)
1369: return pt()
1370:
1.43 dwinter 1371: 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 1372: """Änderung der Properties"""
1373:
1374: self.secondaryLink=secondaryLink
1375: self.secondaryLinkTitle=secondaryLinkTitle
1376: self.imageTag=imageTag
1377: self.bgcolour=bgcolour
1.43 dwinter 1378: self.logo=logo
1379:
1.38 dwinter 1380: if coords:
1381: coordsnew=[ string.split(x,",") for x in coords]
1382: self.coords=coordsnew[0:]
1383: else:
1384: coordsnew=None
1385: self.coords=None
1386:
1387: setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordsnew)
1388:
1389:
1390:
1391: self.sortfield=sortfield
1392:
1393: if RESPONSE is not None:
1394: RESPONSE.redirect('manage_main')
1.40 dwinter 1395:
1396: def getLogo(self):
1397: """logo ausgeben"""
1.43 dwinter 1398: try:
1399: return self.logo
1400: except:
1401: return "ECHO_groups"
1.40 dwinter 1402:
1.38 dwinter 1403: def content_html(self):
1404: """template fuer content"""
1405: return content_html(self,'group')
1406:
1407:
1408:
1409: def manage_addECHO_groupForm(self):
1410: """Add group form"""
1411: pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_groupForm.zpt').__of__(self)
1412: return pt()
1413:
1414:
1.43 dwinter 1415: 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 1416: """add a echo group"""
1417:
1418:
1419: newObj=ECHO_group(id,title,label,description,contentType,responsible,credits,weight,sortfield,coords,secondaryLinkTitle=secondaryLinkTitle,secondaryLink=secondaryLink,imageTag=imageTag,bgcolour="")
1420:
1.43 dwinter 1421: setattr(newObj,'logo',logo)
1.38 dwinter 1422: self._setObject(id,newObj)
1.43 dwinter 1423:
1.38 dwinter 1424: if RESPONSE is not None:
1425: RESPONSE.redirect('manage_main')
1426:
1427:
1428:
1.1 casties 1429: class ECHO_root(Folder,Persistent,Implicit):
1430: """ECHO Root Folder"""
1431: meta_type="ECHO_root"
1.23 dwinter 1432:
1.49 dwinter 1433:
1434: def getImageTag(self):
1435: """needed by main_template"""
1436: return ""
1437: secondaryLink="" #needed by main_template
1438: secondaryLinkTitle="" #needed by main_template
1439:
1.35 dwinter 1440: def getBgcolour(self):
1441: """hack"""
1442: return "#dddddd"
1.28 dwinter 1443:
1444: def contentTypeSelector_HTML(self,selected=None):
1445: """give type selector"""
1446: if not selected:
1447: retStr="<option selected>\n"
1448: else:
1449: retStr="<option>\n"
1450:
1.62 dwinter 1451: try: # erste version contentTypes exists
1.73 dwinter 1452: for contentType in self.ZopeFind(self.contentTypes,obj_metatypes=["ECHO_contentType","OSAS_MetadataMapping"]):
1.28 dwinter 1453: if selected and (contentType[0]==selected):
1454: retStr+="""<option selected value="%s">%s\n"""%(contentType[0],contentType[0])
1455: else:
1456: retStr+="""<option value="%s">%s\n"""%(contentType[0],contentType[0])
1457: except:
1.62 dwinter 1458: try:
1459: for contentType in self.ZopeFind(self.standardMD,obj_metatypes=["OSAS_MetadataMapping"]):
1460: if selected and (contentType[0]==selected):
1461: retStr+="""<option selected value="%s">%s\n"""%(contentType[0],contentType[0])
1462: else:
1463: retStr+="""<option value="%s">%s\n"""%(contentType[0],contentType[0])
1464: except:
1465: """nothing"""
1466:
1.73 dwinter 1467: return retStr
1468:
1469: def renderingTypeSelector_HTML(self,selected=None):
1470: """give type selector"""
1471: if not selected:
1472: retStr="<option selected>\n"
1473: else:
1474: retStr="<option>\n"
1475:
1476: try: # erste version renderingTypes exists
1477: for renderingType in self.ZopeFind(self.renderingTypes,obj_metatypes=["ECHO_renderingType"]):
1478: if selected and (renderingType[0]==selected):
1479: retStr+="""<option selected value="%s">%s\n"""%(renderingType[0],renderingType[0])
1480: else:
1481: retStr+="""<option value="%s">%s\n"""%(renderingType[0],renderingType[0])
1482: except:
1483: """nothing"""
1484: return retStr
1485:
1486: def renderingTypeSelector_HTML(self,selected=None):
1487: """give type selector"""
1488: if not selected:
1489: retStr="<option selected>\n"
1490: else:
1491: retStr="<option>\n"
1492:
1493: try: # erste version renderingTypes exists
1494: for renderingType in self.ZopeFind(self.renderingTypes,obj_metatypes=["ECHO_renderingType"]):
1495: if selected and (renderingType[0]==selected):
1496: retStr+="""<option selected value="%s">%s\n"""%(renderingType[0],renderingType[0])
1497: else:
1498: retStr+="""<option value="%s">%s\n"""%(renderingType[0],renderingType[0])
1499: except:
1500: """nothing"""
1501: return retStr
1502:
1503:
1504: def copyrightTypeSelector_HTML(self,selected=None):
1505: """give type selector"""
1506: if not selected:
1507: retStr="<option selected>\n"
1508: else:
1509: retStr="<option>\n"
1510:
1511: try: # erste version copyrightTypes exists
1512: for copyrightType in self.ZopeFind(self.copyrightTypes,obj_metatypes=["ECHO_copyrightType"]):
1513: if selected and (copyrightType[0]==selected):
1514: retStr+="""<option selected value="%s">%s\n"""%(copyrightType[0],copyrightType[0])
1515: else:
1516: retStr+="""<option value="%s">%s\n"""%(copyrightType[0],copyrightType[0])
1517: except:
1518: """nothing"""
1519: return retStr
1520:
1.28 dwinter 1521:
1.27 dwinter 1522: def patchContentType(self,obj=None):
1523: """austauschen content_type with contentType (patch bei umstieg von alter Version)"""
1524:
1525:
1526: if not obj:
1527: obj = self
1528:
1.30 dwinter 1529: entries=obj.ZopeFind(obj,obj_metatypes=['ECHO_resource','ECHO_collection','ECHO_externalLink','ECHO_pageTemplate'])
1.27 dwinter 1530:
1531: for entry in entries:
1.31 dwinter 1532: setattr(entry[1],'contentType',entry[1].content_type)
1533: #entry[1].contentType == entry[1].content_type
1.27 dwinter 1534:
1535: if entry[1].meta_type == 'ECHO_collection':
1536: entry[1].patchContentType(entry[1])
1.19 dwinter 1537:
1.27 dwinter 1538:
1.49 dwinter 1539: return "changed all contenttypes in: "+self.title
1.63 dwinter 1540:
1541:
1542: def patchViewClassification(self,obj=None):
1543: """setze viewClassification heuristisch"""
1544:
1545: def checkIfArrow(obj):
1546: if hasattr(obj,'coords'):
1547: for coordtemp in obj.coords:
1.73 dwinter 1548: #print obj.title,len(coordtemp)
1.64 dwinter 1549: if (len(coordtemp)>4) and not (coordtemp[4]==''):
1.63 dwinter 1550: return 4
1551: return None
1552: return None
1553:
1554: if not obj:
1555: obj = self
1556:
1557: entries=obj.ZopeFind(obj,obj_metatypes=['ECHO_resource','ECHO_collection','ECHO_group'])
1558:
1559: for entry in entries:
1560:
1.64 dwinter 1561: if checkIfArrow(entry[1]):
1.63 dwinter 1562: setattr(entry[1],'viewClassification','view point')
1563: else:
1564: setattr(entry[1],'viewClassification','area')
1565:
1566: #entry[1].contentType == entry[1].content_type
1567:
1568: if entry[1].meta_type in ['ECHO_collection','ECHO_group']:
1569: entry[1].patchViewClassification(entry[1])
1570:
1571:
1572: return "changed all contenttypes in: "+self.title
1573:
1.19 dwinter 1574: def ECHO_newViewerLink(self,obj=None):
1575: """change links (:86 faellt weg)"""
1576:
1577: if not obj:
1578: obj = self
1579:
1580: entries=obj.ZopeFind(obj,obj_metatypes=['ECHO_resource','ECHO_collection'])
1581:
1582: for entry in entries:
1583:
1584: if entry[1].meta_type == 'ECHO_resource':
1585:
1586: entry[1].link=re.sub('\:86','',entry[1].link)
1587:
1588: else:
1589:
1590: entry[1].ECHO_newViewerLink(entry[1])
1591:
1592: return "Rerenderd all links to resources in: "+self.title
1.1 casties 1593:
1594: def __init__(self,id,title):
1595: """init"""
1596: self.id = id
1597: self.title=title
1.13 dwinter 1598:
1.14 dwinter 1599: def deleteSpace(self,str):
1600: """delete space at the end of a line"""
1601: if str[len(str)-1]==" ":
1602: return str[0:len(str)-1]
1603: else:
1604: return str
1605:
1606:
1607:
1608: # zusaetliche methoden fuer das vlp muessen in ein eigenes produkt
1609:
1610: def formatAscii(self,str,url=None):
1611: """ersetze ascii umbrueche durch <br>"""
1612: #url=None
1613: if url:
1614:
1615: retStr=""
1616: words=str.split("\n")
1617:
1618: for word in words:
1619: strUrl=url%word
1.73 dwinter 1620: #print "str",strUrl
1.14 dwinter 1621: retStr+="""<a href="%s">%s</a><br/>"""%(strUrl,word)
1622: str=retStr
1623: if str:
1624: return re.sub(r"[\n]","<br/>",str)
1625: else:
1626: return ""
1627:
1628: def link2html(self,str):
1629: """link2html fuer VLP muss hier noch raus"""
1630: if str:
1.73 dwinter 1631: #print str
1.14 dwinter 1632: str=re.sub("\&","&",str)
1633: dom=xml.dom.minidom.parseString("<?xml version='1.0' ?><txt>"+str+"</txt>")
1634: links=dom.getElementsByTagName("link")
1635:
1.73 dwinter 1636: #print "link",links
1.14 dwinter 1637: for link in links:
1638: link.tagName="a"
1639: ref=link.getAttribute("ref")
1640: if self.checkRef(ref):
1641: link.setAttribute("href",self.aq_parent.absolute_url()+"/vlp_coll?id="+ref)
1642:
1643: return dom.toxml('utf-8')
1644: return ""
1645:
1646:
1647: def checkRef(self,ref):
1648: dbs={'vl_literature':'AND CD LIKE \'%lise%\'','vl_technology':'','vl_people':''}
1649: res=None
1650: for db in dbs.keys():
1651: #print ref,"select reference from %s where reference =\'%s\' %s"%(db,ref,dbs[db])
1652:
1653: res=res or self.search(var=str("select reference from %s where reference =\'%s\' %s"%(db,ref,dbs[db])))
1654: return res
1655:
1656: #Ende Methode fuer vlp
1657:
1.13 dwinter 1658: def PgQuoteString(self,string):
1659: """Quote string"""
1.14 dwinter 1660: #print "PG",string
1.13 dwinter 1661: return libpq.PgQuoteString(string)
1.1 casties 1662:
1663: def getPartners(self):
1664: """Get list of Partners. Presently only from a subfolder partners"""
1.26 dwinter 1665:
1666: return [ item[1] for item in self.partners.ZopeFind(self.partners,obj_metatypes=['ECHO_partner'])]
1.13 dwinter 1667:
1.1 casties 1668:
1.26 dwinter 1669:
1.1 casties 1670:
1.24 dwinter 1671:
1.26 dwinter 1672: def getPartnersXML(self):
1673: """partner liste als xml"""
1674: partners=self.getPartners()
1.60 dwinter 1675: ret="""<?xml version="1.0" encoding="utf-8" ?>
1676: <partners>"""
1677:
1678: for partner in partners:
1679: ret+="""<partner id="%s" title="%s"/>\n"""%(partner.getId(),unicode(partner.title,'utf-8','replace'))
1.26 dwinter 1680:
1681: return ret+"\n</partners>"
1.24 dwinter 1682:
1.1 casties 1683: def getCollectionTree(self):
1684: """get the collection tree (list of triples (parent,child, depth)"""
1685:
1686: def getCollection(object,depth=0):
1687: depth+=1
1688: collections=[]
1689: for entry in object.__dict__.keys():
1690: element=getattr(object,entry)
1691: try:
1692: if element.meta_type=="ECHO_collection":
1693: collections.append((object,element,depth))
1694: collections+=getCollection(element,depth)
1695: except:
1696: """nothing"""
1697: return collections
1698:
1699:
1700: return getCollection(self)
1701:
1702: def getCollectionTreeIds(self):
1703: """Show the IDs of the Tree"""
1704: ret=[]
1705: for collection in self.getCollectionTree():
1706: ret.append((collection[0].getId(),collection[1].getId(),collection[2]))
1707: return ret
1708:
1709:
1710:
1.13 dwinter 1711: def manage_addECHO_root(self,id,title,RESPONSE=None):
1.1 casties 1712: """Add an ECHO_root"""
1713: self._setObject(id,ECHO_root(id,title))
1714:
1715: if RESPONSE is not None:
1716: RESPONSE.redirect('manage_main')
1717:
1.13 dwinter 1718: def manage_addECHO_rootForm(self):
1.1 casties 1719: """Nothing yet"""
1.13 dwinter 1720: pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_root.zpt').__of__(self)
1.1 casties 1721: return pt()
1722:
1723: class ECHO_partner(Image,Persistent):
1724: """ECHO Partner"""
1725:
1726: meta_type="ECHO_partner"
1727:
1.29 dwinter 1728: def __init__(self, id, title,url, file, content_type='', precondition=''):
1.1 casties 1729: self.__name__=id
1730: self.title=title
1731: self.url=url
1732: self.precondition=precondition
1733:
1734: data, size = self._read_data(file)
1.29 dwinter 1735: content_type=self._get_content_type(file, data, id, content_type)
1736: self.update_data(data, content_type, size)
1.1 casties 1737:
1738: manage_options = Image.manage_options+(
1739: {'label':'Partner Information','action':'ECHO_partner_config'},
1740: )
1741:
1742: def changeECHO_partner(self,url,RESPONSE=None):
1743: """Change main information"""
1744: self.url=url
1745: if RESPONSE is not None:
1746: RESPONSE.redirect('manage_main')
1747:
1748:
1749:
1750: def ECHO_partner_config(self):
1751: """Main configuration"""
1752: if not hasattr(self,'url'):
1753: self.url=""
1.13 dwinter 1754: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_partner.zpt').__of__(self)
1.1 casties 1755: return pt()
1756:
1757:
1.13 dwinter 1758: manage_addECHO_partnerForm=DTMLFile('dtml/ECHO_partnerAdd',globals(),
1.1 casties 1759: Kind='ECHO_partner',kind='ECHO_partner')
1760:
1761:
1762:
1.29 dwinter 1763: def manage_addECHO_partner(self, id, file,url, title='', precondition='', content_type='',
1.1 casties 1764: REQUEST=None):
1765: """
1766: Add a new ECHO_partner object.
1767:
1768: Creates a new ECHO_partner object 'id' with the contents of 'file'.
1769: Based on Image.manage_addImage
1770: """
1771:
1772: id=str(id)
1773: title=str(title)
1.29 dwinter 1774: content_type=str(content_type)
1.1 casties 1775: precondition=str(precondition)
1776:
1777: id, title = OFS.Image.cookId(id, title, file)
1778:
1779: self=self.this()
1780:
1781: # First, we create the image without data:
1.29 dwinter 1782: self._setObject(id, ECHO_partner(id,title,url,'',content_type, precondition))
1.1 casties 1783:
1784: # Now we "upload" the data. By doing this in two steps, we
1785: # can use a database trick to make the upload more efficient.
1786: if file:
1787: self._getOb(id).manage_upload(file)
1.29 dwinter 1788: if content_type:
1789: self._getOb(id).content_type=content_type
1.1 casties 1790:
1791: if REQUEST is not None:
1792: try: url=self.DestinationURL()
1793: except: url=REQUEST['URL1']
1794: REQUEST.RESPONSE.redirect('%s/manage_main' % url)
1795: return id
1796:
1797:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>