Annotation of ECHO_content/ECHO_collection.py, revision 1.72
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.29 dwinter 48: def content_html(self,type):
49: """template fuer content"""
50: #templates = self.ZopeFind(self.aq_parent,obj_ids=[type+"_template"])
51: #
52: #if templates:
53: # return templates[0][1]()
1.6 dwinter 54:
1.29 dwinter 55: try:
56: obj=getattr(self,type+"_template")
57: return obj()
58: except:
59: pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_%s_template_standard.zpt'%type).__of__(self)
60: pt.content_type="text/html"
61: return pt()
62:
1.1 casties 63: def toList(field):
64: """Einzelfeld in Liste umwandeln"""
65: if type(field)==StringType:
66: return [field]
67: else:
68: return field
69:
70: def getText(nodelist):
71:
72: rc = ""
73: for node in nodelist:
74: if node.nodeType == node.TEXT_NODE:
75: rc = rc + node.data
76: return rc
77:
78:
1.65 casties 79: def sendFile(self, filename, type):
80: """sends an object or a local file (in the product) as response"""
81: paths = filename.split('/')
82: object = self
83: # look for an object called filename
84: for path in paths:
85: if hasattr(object, path):
86: object = getattr(object, path)
87: else:
88: object = None
89: break
90: if object:
91: # if the object exists then send it
92: object()
93: else:
94: # send a local file with the given content-type
95: fn = os.path.join(package_home(globals()), filename)
96: self.REQUEST.RESPONSE.setHeader("Content-Type", type)
97: self.REQUEST.RESPONSE.write(file(fn).read())
98: return
99:
100:
1.1 casties 101: def readMetadata(url):
102: """Methoden zum Auslesen der Metadateninformation zu einer Resource
103: Vorerst noch Typ bib"""
104:
105: metadict={}
106: try:
107: geturl=""
108: for line in urllib.urlopen(url).readlines():
109: geturl=geturl+line
110:
111:
112: except:
113: return (None,"Cannot open: "+url)
114:
115: try:
116: dom=xml.dom.minidom.parseString(geturl)
117: except:
118: return (None,"Cannot parse: "+url+"<br>"+geturl)
119:
120: metanode=dom.getElementsByTagName('bib')
121: metadict['bib_type']='Book'
122: if len(metanode)==0:
123: metanode=dom.getElementsByTagName('archimedes')
124: metadict['bib_type']='Archimedes'
125: #print "HELLO"
126:
127: if not len(metanode)==0:
128: metacontent=metanode[0].childNodes
129:
130: try:
131: metadict['bib_type']=getText(dom.getElementsByTagName('bib')[0].attributes['type'].childNodes)
132: except:
133: """nothing"""
134:
135: for node in metacontent:
136: try:
137: metadict[node.tagName.lower()]=getText(node.childNodes)
138: except:
139: """nothing"""
140:
141: #print metadict
142: return metadict,""
143:
144:
1.27 dwinter 145: def setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordstrs,viewClassification=""):
1.1 casties 146:
147: """Allegemeine Informationen zu einer ECHO Collection"""
148:
1.6 dwinter 149: self.viewClassification=viewClassification
150:
1.1 casties 151: self.label = label
152: self.title=title
153: self.description=description
1.27 dwinter 154: self.contentType=contentType
1.1 casties 155: self.responsible=responsible
156: self.credits=toList(credits)
157: self.weight=weight
158:
1.5 dwinter 159: coords=[]
1.1 casties 160: #coordinates of for rectangles
1.10 dwinter 161:
1.9 dwinter 162: #print "cs", coordstrs
163: if coordstrs:
164: for coordstr in coordstrs:
1.12 dwinter 165: #print "cs", coordstr
1.9 dwinter 166: try:
167: temco=coordstr.split(",")
168: except:
169: temco=[]
170: #temco.append(angle)
171: coords.append(temco)
172:
1.10 dwinter 173:
1.5 dwinter 174: self.coords=coords[0:]
1.1 casties 175:
176:
177: class scientificClassification(SimpleItem,Persistent,Implicit):
1.13 dwinter 178: """outdated will be deleeted in the next versions: subclass"""
1.1 casties 179: security=ClassSecurityInfo()
180:
181: def __init__(self,context,science,practice):
182: self.context=context
183: self.science=science
184: self.practice=practice
185: self.id="scientific_Classification"
186:
187: security.declarePublic('get_context')
188: def get_context(self):
189: return self.context
190:
191: security.declarePublic('get_science')
192: def get_science(self):
193: return self.science
194:
195: security.declarePublic('get_practice')
196: def get_practice(self):
197: return self.practice
198:
199:
200: class scientificInformation(Folder,Persistent,Implicit):
1.13 dwinter 201: """outdated will be deleted in the next versions: subclass scientificInformation"""
1.1 casties 202: security=ClassSecurityInfo()
203:
204:
205:
206: def __init__(self,source_type,period):
207:
208: self.id="scientific_Information"
209: self.source_type=source_type
210: self.period=period
211:
212:
213:
214: security.declarePublic('get_source_type')
215: def get_source_type(self):
216: return self.source_type
217:
218: security.declarePublic('get_period')
219: def get_period(self):
220: return self.period
221:
1.29 dwinter 222: class ECHO_layoutTemplate(ZopePageTemplate):
223: """Create a layout Template for different purposes"""
224:
225: meta_type="ECHO_layoutTemplate"
226:
227: def __init__(self, id, text=None, content_type=None,EchoType=None):
228: self.id = str(id)
229:
230:
231:
232: self.ZBindings_edit(self._default_bindings)
233: if text is None:
234: self._default_content_fn = os.path.join(package_home(globals()),
235: 'zpt/ECHO_%s_template_standard.zpt'%EchoType)
236: text = open(self._default_content_fn).read()
237: self.pt_edit(text, content_type)
238:
1.32 dwinter 239:
1.29 dwinter 240: """change form"""
241:
242:
243: def manage_addECHO_layoutTemplateForm(self):
244: """Form for adding"""
245: pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_layoutTemplate.zpt').__of__(self)
246: return pt()
247:
248: from urllib import quote
249:
250:
251: def manage_addECHO_layoutTemplate(self, EchoType,title=None,REQUEST=None):
252: "Add a Page Template with optional file content."
253: if type(EchoType)==StringType:
254: EchoTypes=[EchoType]
255: else:
256: EchoTypes=EchoType
257:
258: for singleType in EchoTypes:
1.32 dwinter 259:
1.29 dwinter 260: id = str(singleType)+"_template"
261: if REQUEST is None:
262: self._setObject(id, ECHO_layoutTemplate(id, text,EchoType=singleType))
263: ob = getattr(self, id)
264:
265: if title:
266: ob.pt_setTitle(title)
267: return ob
268: else:
269: file = REQUEST.form.get('file')
270: headers = getattr(file, 'headers', None)
271: if headers is None or not file.filename:
272: zpt = ECHO_layoutTemplate(id,EchoType=singleType)
273: else:
274: zpt = ECHO_layoutTemplate(id, file, headers.get('content_type'))
275:
276: self._setObject(id, zpt)
277: ob = getattr(self, id)
278: if title:
279: ob.pt_setTitle(title)
280:
281: try:
282: u = self.DestinationURL()
283: except AttributeError:
284: u = REQUEST['URL1']
285:
286:
287: REQUEST.RESPONSE.redirect(u+'/manage_main')
288: return ''
1.1 casties 289:
290: class ECHO_resource(Folder):
291: """ECHO Ressource"""
292: meta_type='ECHO_resource'
293:
1.6 dwinter 294: viewClassificationList=viewClassificationListMaster
1.1 casties 295:
1.41 dwinter 296: getSubCols = ECHO_helpers.getSubCols
1.48 dwinter 297: def getTitle(self):
298: """title"""
299: return self.title.encode('utf-8')
300:
301: def getLabel(self):
302: """title"""
303: return self.label.encode('utf-8')
1.41 dwinter 304:
1.29 dwinter 305: def content_html(self):
306: """template fuer content"""
307: return content_html(self,'resource')
308:
1.6 dwinter 309: def getViewClassification(self):
310: if hasattr(self,'viewClassification'):
311: return self.viewClassification
312: else:
313: return ""
1.13 dwinter 314:
1.9 dwinter 315: def getCredits(self):
316: """Ausgabe der credits"""
317: if self.credits:
318: return self.credits
319: else:
320: return []
1.6 dwinter 321:
1.27 dwinter 322: def __init__(self,id,link,metalink,title,label,description,contentType,responsible,credits,weight,coords):
1.1 casties 323:
324: self.id = id
325: """Festlegen der ID"""
326:
327: self.label = label
328: self.link= link
329: self.metalink=metalink
330: self.title=title
331: self.weight=weight
332: self.credits=toList(credits)
333: self.description=description
1.27 dwinter 334: self.contentType=contentType
1.1 casties 335: self.responsible=responsible
1.9 dwinter 336:
337: if coords:
338: coordsnew=[ string.split(x,",") for x in coords]
339: else:
340: coordsnew=[]
341:
1.1 casties 342: self.coords=coordsnew
343:
1.3 dwinter 344:
345: def getCoords(self):
346: try:
1.4 dwinter 347: return [string.join(x,",") for x in self.coords]
1.3 dwinter 348: except:
349: return []
350:
1.49 dwinter 351: def getContentType(self):
352: try:
353: return self.contentType
354: except:
355: return ""
1.1 casties 356:
357: def ECHO_resource_config(self):
358: """Main configuration"""
359:
360: if not hasattr(self,'weight'):
361: self.weight=""
362: if not hasattr(self,'coords'):
363: self.coords=[]
364:
1.21 dwinter 365: print "vorher",self.coords
1.13 dwinter 366: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resource.zpt').__of__(self)
1.1 casties 367: return pt()
368:
369:
1.27 dwinter 370: def changeECHO_resource(self,metalink,link,title,label,description,contentType,responsible,weight,viewClassification="",coords=None,credits=None,RESPONSE=None):
1.1 casties 371: """Änderung der Properties"""
372:
1.33 dwinter 373: try:
374: coordsnew=[ string.split(x,",") for x in coords]
375: except:
376: coordsnew=[]
1.21 dwinter 377:
1.27 dwinter 378: setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordsnew)
1.62 dwinter 379: self.viewClassification=viewClassification
1.21 dwinter 380: self.coords=coordsnew[0:]
1.1 casties 381: self.link=link
382: self.metalink=metalink
383:
384: if RESPONSE is not None:
385: RESPONSE.redirect('manage_main')
386:
387:
388: manage_options = Folder.manage_options+(
389: {'label':'Main Config','action':'ECHO_resource_config'},
390: {'label':'Metadata','action':'ECHO_getResourceMD'},
1.3 dwinter 391: {'label':'Graphics','action':'ECHO_graphicEntry'},
1.1 casties 392: )
393:
1.20 dwinter 394: def getOverview(self):
395: """overview graphics"""
396:
397: return self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['overview'])[0][1]
398:
1.3 dwinter 399: def ECHO_graphicEntry(self):
400: """DO nothing"""
1.20 dwinter 401: overview = self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['overview'])
1.19 dwinter 402: if overview:
1.13 dwinter 403: pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_draw.zpt').__of__(self)
1.3 dwinter 404: return pt()
405: else:
406: return "NO OVERVIEW GRAPHICS"
407:
1.4 dwinter 408: def ECHO_enterCoords(self,coordstr,angle="",RESPONSE=None):
1.3 dwinter 409: """Enter coords"""
410: coords=self.coords
1.4 dwinter 411: temco=coordstr.split(",")
412: temco.append(angle)
413: coords.append(temco)
414:
1.3 dwinter 415: self.coords=coords[0:]
1.13 dwinter 416:
1.3 dwinter 417: if RESPONSE is not None:
418: RESPONSE.redirect('ECHO_graphicEntry')
419:
1.1 casties 420: def ECHO_getResourceMD(self,template="yes"):
421: """Einlesen der Metadaten und Anlegen dieser Metadaten als Informationen zur Resource"""
422: (metadict, error)=readMetadata(self.metalink)
423:
1.13 dwinter 424:
1.1 casties 425:
426: if not error=="": #Fehler beim Auslesen des Metafiles
427: return "ERROR:",error
428: for key in metadict.keys():#Hinzufügen der Felder
429:
430: setattr(self,key,metadict[key].encode('ascii','replace'))
431:
432:
433: self.metadata=metadict.keys()
1.13 dwinter 434:
1.1 casties 435: self.label=self.generate_label()
436:
437: if template=="yes":
1.13 dwinter 438: pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_resourceMD.zpt').__of__(self)
1.1 casties 439: return pt()
440:
441: def ECHO_getMD(self,item):
442: """Ausgabe der MD"""
443: return getattr(self,item)
444:
445: def index_html(self):
446: """standard page"""
447:
448: return self.REQUEST.RESPONSE.redirect(self.link)
449:
450: def generate_label(self):
451: """Erzeugt_standard_Label aus Template"""
452: pt=getattr(self,"label_template_"+self.bib_type)
1.13 dwinter 453:
1.1 casties 454: return pt()
455:
1.13 dwinter 456: def manage_addECHO_resourceForm(self):
457: """Form for adding a ressource"""
458: pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_resourceForm.zpt').__of__(self)
1.1 casties 459: return pt()
460:
461:
1.10 dwinter 462:
1.27 dwinter 463: def manage_addECHO_resource(self,id,title,label,description,contentType,responsible,link,metalink,weight,credits=None,coords=None,RESPONSE=None):
1.13 dwinter 464: """addaresource"""
1.1 casties 465:
1.27 dwinter 466: newObj=ECHO_resource(id,link,metalink,title,label,description,contentType,responsible,credits,weight,coords)
1.1 casties 467:
468: self._setObject(id,newObj)
1.13 dwinter 469:
1.1 casties 470: if RESPONSE is not None:
471: RESPONSE.redirect('manage_main')
472:
473:
474: class ECHO_externalLink(Folder):
475: """Link zu einer externen Ressource"""
476: security=ClassSecurityInfo()
477: meta_type='ECHO_externalLink'
478:
1.48 dwinter 479: def getTitle(self):
480: """title"""
481: return self.title.encode('utf-8')
482:
483: def getLabel(self):
484: """title"""
485: return self.label.encode('utf-8')
486:
1.29 dwinter 487: def content_html(self):
488: """template fuer content"""
489: return content_html(self,'externalLink')
490:
1.27 dwinter 491: def __init__(self,id,link,title,label,description,contentType,responsible,credits,weight,coords):
1.1 casties 492:
493: self.id = id
494: """Festlegen der ID"""
495:
496: self.credits=toList(credits)
497: self.label = label
498: self.link= link
499: self.title=title
500: self.weight=weight
501: self.description=description
1.27 dwinter 502: self.contentType=contentType
1.1 casties 503: self.responsible=responsible
504: coordsnew=[ string.split(x,",") for x in coords]
505: self.coords=coordsnew
506:
507: def ECHO_externalLink_config(self):
508: """Main configuration"""
509:
510: if not hasattr(self,'weight'):
511: self.weight=""
512: if not hasattr(self,'coords'):
1.9 dwinter 513:
1.1 casties 514: self.coords=['']
1.12 dwinter 515: #print "G",self.coords
1.1 casties 516:
1.13 dwinter 517: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_externalLink.zpt').__of__(self)
1.1 casties 518: return pt()
519:
520:
1.37 dwinter 521: def changeECHO_externalLink(self,link,title,label,description,contentType,responsible,weight,coords=None,credits=None,RESPONSE=None):
1.1 casties 522:
523: """Änderung der Properties"""
1.36 dwinter 524: try:
525: coordsnew=[ string.split(x,",") for x in coords]
526: except:
527: coordsnew=[]
1.1 casties 528:
1.27 dwinter 529: setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coords)
1.1 casties 530:
1.21 dwinter 531: self.coords=coordsnew[0:]
1.1 casties 532: self.link=link
533: if RESPONSE is not None:
534: RESPONSE.redirect('manage_main')
535:
536:
537: manage_options = Folder.manage_options+(
538: {'label':'Main Config','action':'ECHO_externalLink_config'},
539: )
1.17 dwinter 540:
541: def getCredits(self):
542: """Ausgabe der credits"""
543: if self.credits:
544: return self.credits
545: else:
546: return []
547:
1.1 casties 548: def index_html(self):
549: """standard page"""
550:
551: return self.REQUEST.RESPONSE.redirect(self.link)
552:
1.13 dwinter 553: def manage_addECHO_externalLinkForm(self):
554: """Form for external Links"""
555: pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_externalLinkForm.zpt').__of__(self)
1.1 casties 556: return pt()
557:
558:
1.27 dwinter 559: def manage_addECHO_externalLink(self,id,title,label,description,contentType,responsible,link,weight,coords=None,credits=None,RESPONSE=None):
1.13 dwinter 560: """Add an external Link"""
1.1 casties 561:
1.27 dwinter 562: newObj=ECHO_externalLink(id,link,title,label,description,contentType,responsible,credits,weight,coords)
1.1 casties 563:
564: self._setObject(id,newObj)
1.13 dwinter 565:
1.1 casties 566: if RESPONSE is not None:
567: RESPONSE.redirect('manage_main')
568:
1.24 dwinter 569:
1.51 dwinter 570: class ECHO_link(ECHO_externalLink):
571: """external_link"""
572:
573: meta_type="ECHO_link"
574:
575:
1.53 dwinter 576: def content_html(self):
577: """template fuer content"""
578: return content_html(self,'link')
579:
1.51 dwinter 580: def manage_addECHO_linkForm(self):
581: """Form for external Links"""
582: pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_linkForm.zpt').__of__(self)
583: return pt()
584:
585:
586: def manage_addECHO_link(self,id,title,label,description,contentType,responsible,link,weight,coords=None,credits=None,RESPONSE=None):
587: """Add an external Link"""
588:
589: newObj=ECHO_link(id,link,title,label,description,contentType,responsible,credits,weight,coords)
590:
591: self._setObject(id,newObj)
592:
593: if RESPONSE is not None:
594: RESPONSE.redirect('manage_main')
595:
1.24 dwinter 596:
1.1 casties 597: class ECHO_collection(Folder, Persistent, Implicit):
598: """ECHO Collection"""
599: security=ClassSecurityInfo()
600: meta_type='ECHO_collection'
1.69 dwinter 601: viewClassificationList=viewClassificationListMaster
602: displayTypes=displayTypes
603:
604: def getViewClassification(self):
605: if hasattr(self,'viewClassification'):
606: return self.viewClassification
607: else:
608: return ""
1.48 dwinter 609:
610: def getTitle(self):
611: """title"""
612: return self.title.encode('utf-8')
613:
614: def getLabel(self):
615: """title"""
616: return self.label.encode('utf-8')
1.1 casties 617:
1.45 dwinter 618: def createRessourcesFromXMLForm(self):
619: """form"""
620: pt=PageTemplateFile('Products/ECHO_content/zpt/createRessourcesFromXMLForm.zpt').__of__(self)
621: return pt()
622: def createRessourcesFromXML(self,fileupload):
623: """read an XML file for generating resources"""
624: dom=xml.dom.minidom.parse(fileupload)
625: ret="<h2>Added</h2>"
626: for resource in dom.getElementsByTagName('resource'):
627: link=getText(resource.getElementsByTagName('link')[0].childNodes)
628: label=getText(resource.getElementsByTagName('label')[0].childNodes)
629: #splitted=link.split("?")[0].split("/")
630: #id=splitted[len(splitted)-1].encode('ascii')
631: id=re.sub(" ","_",label).encode('ascii')
632:
633: ret+="<p>"+label+"</p>"
1.46 dwinter 634: manage_addECHO_resource(self,id,label.encode('ascii'),label.encode('ascii'),"","","",link.encode('ascii'),"","")
1.45 dwinter 635: return ret
1.25 dwinter 636: def getImageTag(self):
637: """GetTag"""
638: try:
639: return self.imageTag
640: except:
641: return ""
642:
1.27 dwinter 643: def addResource(self,id,title,label,description,contentType,responsible,link,metalink,weight,credits=None,coords=None,RESPONSE=None):
1.24 dwinter 644: """SSS"""
645: try:
1.27 dwinter 646: manage_addECHO_resource(self,id,title,label,description,contentType,responsible,link,metalink,weight,credits=None,coords=None,RESPONSE=None)
1.24 dwinter 647: return "done"
648: except:
649: return None
1.32 dwinter 650:
651: def getSecondaryLink(self):
652: """secondary link"""
653: try:
654: return self.secondaryLink
655: except:
656: return ""
657:
658: def getSecondaryLinkTitle(self):
659: """secondary link"""
660: try:
661: return self.secondaryLinkTitle
662: except:
663: return ""
664:
1.24 dwinter 665: def getCollectionTreeXML(self):
666: """Tree as XML"""
667:
668: def getCollection(object,depth=0):
669: depth+=1
670: collections=""
671: for entry in object.__dict__.keys():
672: element=getattr(object,entry)
673: try:
1.40 dwinter 674: if element.meta_type in ["ECHO_collection","ECHO_group"]:
1.60 dwinter 675: collections+="<element name=\""+quote(element.title)+"\" url=\""+element.absolute_url()+"\">"
1.24 dwinter 676: collections+=getCollection(element,depth)+"</element>\n"
677: except:
678: """nothing"""
679: return collections
680:
1.60 dwinter 681: ret="""<?xml version="1.0" encoding="utf-8" ?>"""
682: return ret+"<collection>"+getCollection(self)+"</collection>"
1.24 dwinter 683:
1.23 dwinter 684: def createJavaScript(self):
685: """CreateJava"""
1.72 ! casties 686: ret=javaScriptMain
1.23 dwinter 687:
1.65 casties 688: dynamical="\n"
1.23 dwinter 689: for ob in self.getGraphicCoords():
1.47 casties 690: if ob[4][4] == "":
1.72 ! casties 691: dynamical+="""Coords.push(new Coord('%s', Img, %s));\n"""%(ob[1],ob[0])
! 692: else:
! 693: dynamical+="""Coords.push(new Coord('%s', Img, %s));//%s\n"""%(ob[1],ob[0],ob[4][4])
! 694: dynamical+="ShowArrow(new getObj('i.%s'),Img,%s);\n"%(ob[1],ob[0])
! 695: ret+=javaHandler%dynamical
! 696: return ret
! 697:
! 698: def createJSAreas(self):
! 699: """CreateJava"""
! 700: dynamical="\n"
! 701: for ob in self.getGraphicCoords():
! 702: if ob[5] == "area":
1.65 casties 703: dynamical+="""addArea('%s', 'overview', %s, 'area');\n"""%(ob[1],ob[0])
1.47 casties 704: else:
1.65 casties 705: dynamical+="""addArea('%s', 'overview', %s, 'arrow');\n"""%(ob[1],ob[0])
1.72 ! casties 706: return dynamical
1.1 casties 707:
708: security.declarePublic('getCreditObject')
709: def getCreditObject(self,name):
710: """credit id to credititem"""
1.15 dwinter 711: try:
712: return getattr(self.partners,name)
713: except:
714: return ""
1.17 dwinter 715:
1.1 casties 716: security.declarePublic('ECHO_generateNavBar')
717: def ECHO_generateNavBar(self):
718: """Erzeuge Navigationsbar"""
719: link=""
720: object="self"
721: ret=[]
722: path=self.getPhysicalPath()
723: for element in path:
724:
725:
726: if not element=="":
727: object+="."+element
728:
729: label=eval(object).label
730: link+="/"+element
731: if not label=="":
732: ret.append((label,link))
733: return ret
734:
735: security.declarePublic('ECHO_rerenderLinksMD')
1.49 dwinter 736: def ECHO_rerenderLinksMD(self,obj=None):
1.1 casties 737: """Rerender all Links"""
1.49 dwinter 738: if not obj:
739: obj = self
1.1 casties 740:
1.49 dwinter 741: entries=obj.ZopeFind(obj,obj_metatypes=['ECHO_resource','ECHO_collection'])
742:
743: for entry in entries:
744: if entry[1].meta_type == 'ECHO_resource':
745: entry[1].ECHO_getResourceMD(template="no")
746: print "rerender",entry[1].getId()
747: else:
748: self.ECHO_rerenderLinksMD(entry[1])
749:
1.1 casties 750:
751:
752: return "Rerenderd all links to resources in: "+self.title
1.19 dwinter 753:
754: security.declarePublic('ECHO_newViewerLink')
1.1 casties 755:
756:
757: def getCoords(self):
758: try:
1.11 dwinter 759:
760: x= [string.join(x,",") for x in self.coords]
761: return x
1.4 dwinter 762:
1.11 dwinter 763: except:
1.4 dwinter 764:
1.1 casties 765: return []
1.3 dwinter 766:
1.34 dwinter 767: def __init__(self,id,title,label,description,contentType,responsible,credits,weight,sortfield,coords,secondaryLinkTitle,secondaryLink,imageTag="",bgcolour=""):
1.9 dwinter 768: #print "CO",coords
1.1 casties 769:
770: self.id = id
771: """Festlegen der ID"""
772: self.credits=toList(credits)
773: self.label = label
774: self.title=title
775: self.description=description
1.27 dwinter 776: self.contentType=contentType
1.1 casties 777: self.responsible=responsible
1.25 dwinter 778: self.imageTag=imageTag
1.1 casties 779: self.weight=weight
780: self.sortfield=sortfield
781: coordsnew=[ string.split(x,",") for x in coords]
782: self.coords=coordsnew
1.32 dwinter 783: self.secondaryLinkTitle=secondaryLinkTitle
784: self.secondaryLink=secondaryLink
1.35 dwinter 785: self.bgcolour=bgcolour
1.32 dwinter 786:
1.1 casties 787:
788: manage_options = Folder.manage_options+(
1.13 dwinter 789: {'label':'Main Config','action':'ECHO_collection_config'},
1.1 casties 790: {'label':'Rerender Links','action':'ECHO_rerenderLinksMD'},
791: {'label':'Graphics','action':'ECHO_graphicEntry'},
1.45 dwinter 792: {'label':'create resources from XML','action':'createRessourcesFromXMLForm'},
1.1 casties 793:
794: )
795:
1.19 dwinter 796: def getOverview(self):
797: """overview graphics"""
1.20 dwinter 798:
799: return self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['overview'])[0][1]
800:
1.19 dwinter 801:
1.1 casties 802: def ECHO_graphicEntry(self):
803: """DO nothing"""
1.20 dwinter 804: overview = self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['overview'])
1.19 dwinter 805:
1.20 dwinter 806:
1.19 dwinter 807: if overview:
1.13 dwinter 808: pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_draw.zpt').__of__(self)
1.1 casties 809: return pt()
810: else:
811: return "NO OVERVIEW GRAPHICS"
812:
1.4 dwinter 813: def ECHO_enterCoords(self,coordstr,angle="",RESPONSE=None):
1.1 casties 814: """Enter coords"""
1.2 dwinter 815: coords=self.coords
1.4 dwinter 816: temco=coordstr.split(",")
817: temco.append(angle)
818: coords.append(temco)
1.2 dwinter 819: self.coords=coords[0:]
1.13 dwinter 820:
1.2 dwinter 821: if RESPONSE is not None:
822: RESPONSE.redirect('ECHO_graphicEntry')
1.1 casties 823:
824:
1.13 dwinter 825: security.declarePublic('ECHO_collection_config')
826: def ECHO_collection_config(self):
1.1 casties 827: """Main configuration"""
828:
829: if not hasattr(self,'weight'):
830: self.weight=""
831:
832: if not hasattr(self,'sortfield'):
833: self.sortfield="weight"
1.13 dwinter 834:
1.1 casties 835: if not hasattr(self,'coords'):
836: self.coords=[]
837:
1.13 dwinter 838: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_collection.zpt').__of__(self)
1.1 casties 839: return pt()
840:
841:
1.13 dwinter 842: security.declarePublic('changeECHO_collection')
1.1 casties 843:
1.10 dwinter 844:
1.34 dwinter 845: def getBgcolour(self):
846: """colour"""
847: if hasattr(self,'bgcolour') and not (self.bgcolour==""):
848: return self.bgcolour
849: else:
850: return "#dddddd"
851:
1.69 dwinter 852: 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 853: """Aenderung der Properties"""
1.10 dwinter 854:
1.32 dwinter 855: self.secondaryLink=secondaryLink
856: self.secondaryLinkTitle=secondaryLinkTitle
1.25 dwinter 857: self.imageTag=imageTag
1.34 dwinter 858: self.bgcolour=bgcolour
1.69 dwinter 859: self.viewClassification=viewClassification
1.34 dwinter 860:
1.32 dwinter 861: if coords:
862: coordsnew=[ string.split(x,",") for x in coords]
863: self.coords=coordsnew[0:]
864: else:
865: coordsnew=None
866: self.coords=None
867:
868: setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordsnew)
1.44 dwinter 869: try:
870: self.coords=coordsnew[0:] # HACK fehler in setECHO_collection
871: except:
872: """none"""
873:
1.1 casties 874: self.sortfield=sortfield
875:
876: if RESPONSE is not None:
877: RESPONSE.redirect('manage_main')
878:
879: security.declarePublic('index_html')
880:
1.23 dwinter 881:
882: def showOverview(self):
883: """overview"""
884: if 'ECHO_overview.html' in self.__dict__.keys():
885: return getattr(self,'ECHO_overview.html')()
886: pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_content_overview.zpt').__of__(self)
887: return pt()
888:
1.1 casties 889:
890: def index_html(self):
891: """standard page"""
892:
893: if 'index.html' in self.__dict__.keys():
894: return getattr(self,'index.html')()
1.32 dwinter 895:
1.1 casties 896: elif 'overview' in self.__dict__.keys():
897: return self.showOverview()
1.32 dwinter 898: elif hasattr(self,'collection_index_template'):
899: return self.collection_index_template()
1.54 dwinter 900: elif hasattr(self,'main_index_template'):
1.55 dwinter 901: return self.main_index_template()
1.1 casties 902:
1.54 dwinter 903: pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_main_index_template_standard.zpt').__of__(self)
1.29 dwinter 904: pt.content_type="text/html"
1.1 casties 905: return pt()
906:
1.29 dwinter 907: def content_html(self):
908: """template fuer content"""
909: return content_html(self,'collection')
910:
1.11 dwinter 911: def getCredits(self):
912: """Ausgabe der credits"""
913: if self.credits:
914: return self.credits
915: else:
916: return []
1.1 casties 917:
1.65 casties 918: def area_img(self):
919: """area image"""
920: sendFile(self, 'images/red.gif', 'image/gif')
921: return
922:
923: def hl_lib_js(self):
924: """javascript"""
925: sendFile(self, 'js/hl_lib.js', 'text/plain')
926: return
927:
928: def js_lib_js(self):
929: """javascript"""
930: sendFile(self, 'js/js_lib.js', 'text/plain')
931: return
1.23 dwinter 932:
933:
1.1 casties 934: def getGraphicCoords(self):
935: """Give list of coordinates"""
1.68 casties 936: subColTypes=['ECHO_collection','ECHO_resource']
1.1 casties 937: ids=[]
1.67 casties 938: for entrySearch in self.ZopeFind(self,obj_metatypes=subColTypes):
1.66 dwinter 939: object=entrySearch[1]
940: if hasattr(object,'coords'):
941: for coordtemp in object.coords:
942: if len(coordtemp)>3:
943: coord=coordtemp[0:4]
944: label=""
1.70 casties 945: vc=""
1.66 dwinter 946: if hasattr(object,'label') and not object.label=="":
947: label=object.label
948: elif hasattr(object,'title') and not object.title=="":
949: label=object.title
950: else:
951: label=object.getId()
1.70 casties 952: if object.viewClassification != "":
953: vc=object.viewClassification
954: else:
955: if len(coordtemp) > 4 and coordtemp[4] != "":
956: vc="view point"
957: else:
958: vc="area"
959: ids.append([string.join(coord,", "),object.getId(),label,object,coordtemp,vc])
1.1 casties 960: return ids
961:
1.42 dwinter 962:
963:
964:
1.41 dwinter 965: getSubCols = ECHO_helpers.getSubCols
1.1 casties 966:
967:
968:
969:
1.13 dwinter 970: def manage_addECHO_collectionForm(self):
971: """Add collection form"""
972: pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_collectionForm.zpt').__of__(self)
1.1 casties 973: return pt()
974:
975:
1.34 dwinter 976: 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 977: """add a echo collection"""
1.1 casties 978:
979:
1.34 dwinter 980: newObj=ECHO_collection(id,title,label,description,contentType,responsible,credits,weight,sortfield,coords,secondaryLinkTitle=secondaryLinkTitle,secondaryLink=secondaryLink,imageTag=imageTag,bgcolour="")
1.1 casties 981:
982: self._setObject(id,newObj)
1.13 dwinter 983:
1.1 casties 984: if RESPONSE is not None:
985: RESPONSE.redirect('manage_main')
986:
1.38 dwinter 987: class ECHO_group(ECHO_collection):
988: """ECHO Gruppe"""
989: meta_type="ECHO_group"
990:
991: manage_options = Folder.manage_options+(
992: {'label':'Main Config','action':'ECHO_group_config'},
993: {'label':'Rerender Links','action':'ECHO_rerenderLinksMD'},
994: {'label':'Graphics','action':'ECHO_graphicEntry'},
995: )
1.52 dwinter 996:
997: def index_html(self):
998: """standard page"""
999: displayedObjects=self.ZopeFind(self,obj_metatypes=displayTypes)
1.61 dwinter 1000: #if (len(displayedObjects)==1) and (displayedObjects[0][1].meta_type=="ECHO_collection"): # nur ein Object dann redirect auf dieses Object
1001: # return self.REQUEST.RESPONSE.redirect(displayedObjects[0][1].absolute_url())
1.52 dwinter 1002:
1003: if 'index.html' in self.__dict__.keys():
1004: return getattr(self,'index.html')()
1.56 dwinter 1005:
1.52 dwinter 1006: elif 'overview' in self.__dict__.keys():
1.56 dwinter 1007: return self.showOverview()
1.52 dwinter 1008: elif hasattr(self,'group_index_template'):
1.56 dwinter 1009: return self.group_index_template()
1010: elif hasattr(self,'collection_index_template'):
1011: return self.collection_index_template()
1.54 dwinter 1012: elif hasattr(self,'main_index_template'):
1.55 dwinter 1013: return self.main_index_template()
1.52 dwinter 1014:
1.54 dwinter 1015: pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_main_index_template_standard.zpt').__of__(self)
1.52 dwinter 1016: pt.content_type="text/html"
1017: return pt()
1018:
1.38 dwinter 1019: def ECHO_group_config(self):
1020: """Main configuration"""
1021:
1022: if not hasattr(self,'weight'):
1023: self.weight=""
1024:
1025: if not hasattr(self,'sortfield'):
1026: self.sortfield="weight"
1027:
1028: if not hasattr(self,'coords'):
1029: self.coords=[]
1030:
1031: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_group.zpt').__of__(self)
1032: return pt()
1033:
1.43 dwinter 1034: 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 1035: """Änderung der Properties"""
1036:
1037: self.secondaryLink=secondaryLink
1038: self.secondaryLinkTitle=secondaryLinkTitle
1039: self.imageTag=imageTag
1040: self.bgcolour=bgcolour
1.43 dwinter 1041: self.logo=logo
1042:
1.38 dwinter 1043: if coords:
1044: coordsnew=[ string.split(x,",") for x in coords]
1045: self.coords=coordsnew[0:]
1046: else:
1047: coordsnew=None
1048: self.coords=None
1049:
1050: setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordsnew)
1051:
1052:
1053:
1054: self.sortfield=sortfield
1055:
1056: if RESPONSE is not None:
1057: RESPONSE.redirect('manage_main')
1.40 dwinter 1058:
1059: def getLogo(self):
1060: """logo ausgeben"""
1.43 dwinter 1061: try:
1062: return self.logo
1063: except:
1064: return "ECHO_groups"
1.40 dwinter 1065:
1.38 dwinter 1066: def content_html(self):
1067: """template fuer content"""
1068: return content_html(self,'group')
1069:
1070:
1071:
1072: def manage_addECHO_groupForm(self):
1073: """Add group form"""
1074: pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_groupForm.zpt').__of__(self)
1075: return pt()
1076:
1077:
1.43 dwinter 1078: 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 1079: """add a echo group"""
1080:
1081:
1082: newObj=ECHO_group(id,title,label,description,contentType,responsible,credits,weight,sortfield,coords,secondaryLinkTitle=secondaryLinkTitle,secondaryLink=secondaryLink,imageTag=imageTag,bgcolour="")
1083:
1.43 dwinter 1084: setattr(newObj,'logo',logo)
1.38 dwinter 1085: self._setObject(id,newObj)
1.43 dwinter 1086:
1.38 dwinter 1087: if RESPONSE is not None:
1088: RESPONSE.redirect('manage_main')
1089:
1090:
1091:
1.1 casties 1092: class ECHO_root(Folder,Persistent,Implicit):
1093: """ECHO Root Folder"""
1094: meta_type="ECHO_root"
1.23 dwinter 1095:
1.49 dwinter 1096:
1097: def getImageTag(self):
1098: """needed by main_template"""
1099: return ""
1100: secondaryLink="" #needed by main_template
1101: secondaryLinkTitle="" #needed by main_template
1102:
1.35 dwinter 1103: def getBgcolour(self):
1104: """hack"""
1105: return "#dddddd"
1.28 dwinter 1106:
1107: def contentTypeSelector_HTML(self,selected=None):
1108: """give type selector"""
1109: if not selected:
1110: retStr="<option selected>\n"
1111: else:
1112: retStr="<option>\n"
1113:
1.62 dwinter 1114: try: # erste version contentTypes exists
1.52 dwinter 1115: for contentType in self.ZopeFind(self.contentTypes,obj_metatypes=["ECHO_contentType"]):
1.28 dwinter 1116: if selected and (contentType[0]==selected):
1117: retStr+="""<option selected value="%s">%s\n"""%(contentType[0],contentType[0])
1118: else:
1119: retStr+="""<option value="%s">%s\n"""%(contentType[0],contentType[0])
1120: except:
1.62 dwinter 1121: try:
1122: for contentType in self.ZopeFind(self.standardMD,obj_metatypes=["OSAS_MetadataMapping"]):
1123: if selected and (contentType[0]==selected):
1124: retStr+="""<option selected value="%s">%s\n"""%(contentType[0],contentType[0])
1125: else:
1126: retStr+="""<option value="%s">%s\n"""%(contentType[0],contentType[0])
1127: except:
1128: """nothing"""
1129:
1.28 dwinter 1130: return retStr
1131:
1.27 dwinter 1132: def patchContentType(self,obj=None):
1133: """austauschen content_type with contentType (patch bei umstieg von alter Version)"""
1134:
1135:
1136: if not obj:
1137: obj = self
1138:
1.30 dwinter 1139: entries=obj.ZopeFind(obj,obj_metatypes=['ECHO_resource','ECHO_collection','ECHO_externalLink','ECHO_pageTemplate'])
1.27 dwinter 1140:
1141: for entry in entries:
1.31 dwinter 1142: setattr(entry[1],'contentType',entry[1].content_type)
1143: #entry[1].contentType == entry[1].content_type
1.27 dwinter 1144:
1145: if entry[1].meta_type == 'ECHO_collection':
1146: entry[1].patchContentType(entry[1])
1.19 dwinter 1147:
1.27 dwinter 1148:
1.49 dwinter 1149: return "changed all contenttypes in: "+self.title
1.63 dwinter 1150:
1151:
1152: def patchViewClassification(self,obj=None):
1153: """setze viewClassification heuristisch"""
1154:
1155: def checkIfArrow(obj):
1156: if hasattr(obj,'coords'):
1157: for coordtemp in obj.coords:
1.64 dwinter 1158: print obj.title,len(coordtemp)
1159: if (len(coordtemp)>4) and not (coordtemp[4]==''):
1.63 dwinter 1160: return 4
1161: return None
1162: return None
1163:
1164: if not obj:
1165: obj = self
1166:
1167: entries=obj.ZopeFind(obj,obj_metatypes=['ECHO_resource','ECHO_collection','ECHO_group'])
1168:
1169: for entry in entries:
1170:
1.64 dwinter 1171: if checkIfArrow(entry[1]):
1172: print "VP"
1.63 dwinter 1173: setattr(entry[1],'viewClassification','view point')
1174: else:
1.64 dwinter 1175: print "area"
1.63 dwinter 1176: setattr(entry[1],'viewClassification','area')
1177:
1178: #entry[1].contentType == entry[1].content_type
1179:
1180: if entry[1].meta_type in ['ECHO_collection','ECHO_group']:
1181: entry[1].patchViewClassification(entry[1])
1182:
1183:
1184: return "changed all contenttypes in: "+self.title
1185:
1.19 dwinter 1186: def ECHO_newViewerLink(self,obj=None):
1187: """change links (:86 faellt weg)"""
1188:
1189: if not obj:
1190: obj = self
1191:
1192: entries=obj.ZopeFind(obj,obj_metatypes=['ECHO_resource','ECHO_collection'])
1193:
1194: for entry in entries:
1195:
1196: if entry[1].meta_type == 'ECHO_resource':
1197:
1198: entry[1].link=re.sub('\:86','',entry[1].link)
1199:
1200: else:
1201:
1202: entry[1].ECHO_newViewerLink(entry[1])
1203:
1204: return "Rerenderd all links to resources in: "+self.title
1.1 casties 1205:
1206: def __init__(self,id,title):
1207: """init"""
1208: self.id = id
1209: self.title=title
1.13 dwinter 1210:
1.14 dwinter 1211: def deleteSpace(self,str):
1212: """delete space at the end of a line"""
1213: if str[len(str)-1]==" ":
1214: return str[0:len(str)-1]
1215: else:
1216: return str
1217:
1218:
1219:
1220: # zusaetliche methoden fuer das vlp muessen in ein eigenes produkt
1221:
1222: def formatAscii(self,str,url=None):
1223: """ersetze ascii umbrueche durch <br>"""
1224: #url=None
1225: if url:
1226:
1227: retStr=""
1228: words=str.split("\n")
1229:
1230: for word in words:
1231: strUrl=url%word
1232: print "str",strUrl
1233: retStr+="""<a href="%s">%s</a><br/>"""%(strUrl,word)
1234: str=retStr
1235: if str:
1236: return re.sub(r"[\n]","<br/>",str)
1237: else:
1238: return ""
1239:
1240: def link2html(self,str):
1241: """link2html fuer VLP muss hier noch raus"""
1242: if str:
1243: print str
1244: str=re.sub("\&","&",str)
1245: dom=xml.dom.minidom.parseString("<?xml version='1.0' ?><txt>"+str+"</txt>")
1246: links=dom.getElementsByTagName("link")
1247:
1248: print "link",links
1249: for link in links:
1250: link.tagName="a"
1251: ref=link.getAttribute("ref")
1252: if self.checkRef(ref):
1253: link.setAttribute("href",self.aq_parent.absolute_url()+"/vlp_coll?id="+ref)
1254:
1255: return dom.toxml('utf-8')
1256: return ""
1257:
1258:
1259: def checkRef(self,ref):
1260: dbs={'vl_literature':'AND CD LIKE \'%lise%\'','vl_technology':'','vl_people':''}
1261: res=None
1262: for db in dbs.keys():
1263: #print ref,"select reference from %s where reference =\'%s\' %s"%(db,ref,dbs[db])
1264:
1265: res=res or self.search(var=str("select reference from %s where reference =\'%s\' %s"%(db,ref,dbs[db])))
1266: return res
1267:
1268: #Ende Methode fuer vlp
1269:
1.13 dwinter 1270: def PgQuoteString(self,string):
1271: """Quote string"""
1.14 dwinter 1272: #print "PG",string
1.13 dwinter 1273: return libpq.PgQuoteString(string)
1.1 casties 1274:
1275: def getPartners(self):
1276: """Get list of Partners. Presently only from a subfolder partners"""
1.26 dwinter 1277:
1278: return [ item[1] for item in self.partners.ZopeFind(self.partners,obj_metatypes=['ECHO_partner'])]
1.13 dwinter 1279:
1.1 casties 1280:
1.26 dwinter 1281:
1.1 casties 1282:
1.24 dwinter 1283:
1.26 dwinter 1284: def getPartnersXML(self):
1285: """partner liste als xml"""
1286: partners=self.getPartners()
1.60 dwinter 1287: ret="""<?xml version="1.0" encoding="utf-8" ?>
1288: <partners>"""
1289:
1290: for partner in partners:
1291: ret+="""<partner id="%s" title="%s"/>\n"""%(partner.getId(),unicode(partner.title,'utf-8','replace'))
1.26 dwinter 1292:
1293: return ret+"\n</partners>"
1.24 dwinter 1294:
1.1 casties 1295: def getCollectionTree(self):
1296: """get the collection tree (list of triples (parent,child, depth)"""
1297:
1298: def getCollection(object,depth=0):
1299: depth+=1
1300: collections=[]
1301: for entry in object.__dict__.keys():
1302: element=getattr(object,entry)
1303: try:
1304: if element.meta_type=="ECHO_collection":
1305: collections.append((object,element,depth))
1306: collections+=getCollection(element,depth)
1307: except:
1308: """nothing"""
1309: return collections
1310:
1311:
1312: return getCollection(self)
1313:
1314: def getCollectionTreeIds(self):
1315: """Show the IDs of the Tree"""
1316: ret=[]
1317: for collection in self.getCollectionTree():
1318: ret.append((collection[0].getId(),collection[1].getId(),collection[2]))
1319: return ret
1320:
1321:
1322:
1.13 dwinter 1323: def manage_addECHO_root(self,id,title,RESPONSE=None):
1.1 casties 1324: """Add an ECHO_root"""
1325: self._setObject(id,ECHO_root(id,title))
1326:
1327: if RESPONSE is not None:
1328: RESPONSE.redirect('manage_main')
1329:
1.13 dwinter 1330: def manage_addECHO_rootForm(self):
1.1 casties 1331: """Nothing yet"""
1.13 dwinter 1332: pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_root.zpt').__of__(self)
1.1 casties 1333: return pt()
1334:
1335: class ECHO_partner(Image,Persistent):
1336: """ECHO Partner"""
1337:
1338: meta_type="ECHO_partner"
1339:
1.29 dwinter 1340: def __init__(self, id, title,url, file, content_type='', precondition=''):
1.1 casties 1341: self.__name__=id
1342: self.title=title
1343: self.url=url
1344: self.precondition=precondition
1345:
1346: data, size = self._read_data(file)
1.29 dwinter 1347: content_type=self._get_content_type(file, data, id, content_type)
1348: self.update_data(data, content_type, size)
1.1 casties 1349:
1350: manage_options = Image.manage_options+(
1351: {'label':'Partner Information','action':'ECHO_partner_config'},
1352: )
1353:
1354: def changeECHO_partner(self,url,RESPONSE=None):
1355: """Change main information"""
1356: self.url=url
1357: if RESPONSE is not None:
1358: RESPONSE.redirect('manage_main')
1359:
1360:
1361:
1362: def ECHO_partner_config(self):
1363: """Main configuration"""
1364: if not hasattr(self,'url'):
1365: self.url=""
1.13 dwinter 1366: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_partner.zpt').__of__(self)
1.1 casties 1367: return pt()
1368:
1369:
1.13 dwinter 1370: manage_addECHO_partnerForm=DTMLFile('dtml/ECHO_partnerAdd',globals(),
1.1 casties 1371: Kind='ECHO_partner',kind='ECHO_partner')
1372:
1373:
1374:
1.29 dwinter 1375: def manage_addECHO_partner(self, id, file,url, title='', precondition='', content_type='',
1.1 casties 1376: REQUEST=None):
1377: """
1378: Add a new ECHO_partner object.
1379:
1380: Creates a new ECHO_partner object 'id' with the contents of 'file'.
1381: Based on Image.manage_addImage
1382: """
1383:
1384: id=str(id)
1385: title=str(title)
1.29 dwinter 1386: content_type=str(content_type)
1.1 casties 1387: precondition=str(precondition)
1388:
1389: id, title = OFS.Image.cookId(id, title, file)
1390:
1391: self=self.this()
1392:
1393: # First, we create the image without data:
1.29 dwinter 1394: self._setObject(id, ECHO_partner(id,title,url,'',content_type, precondition))
1.1 casties 1395:
1396: # Now we "upload" the data. By doing this in two steps, we
1397: # can use a database trick to make the upload more efficient.
1398: if file:
1399: self._getOb(id).manage_upload(file)
1.29 dwinter 1400: if content_type:
1401: self._getOb(id).content_type=content_type
1.1 casties 1402:
1403: if REQUEST is not None:
1404: try: url=self.DestinationURL()
1405: except: url=REQUEST['URL1']
1406: REQUEST.RESPONSE.redirect('%s/manage_main' % url)
1407: return id
1408:
1409:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>