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