1: """New version of the product started February, 8th. Without scientific classification, use content-type for further classification."""
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
13: import re
14: import OFS.Image
15: from types import *
16: from OFS.Image import Image
17: from Globals import DTMLFile
18: from OFS.Folder import Folder
19: from OFS.SimpleItem import SimpleItem
20: from AccessControl import ClassSecurityInfo
21: from Globals import InitializeClass
22: from Globals import DTMLFile
23: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
24: from Products.PageTemplates.PageTemplate import PageTemplate
25: from Globals import Persistent
26: from Acquisition import Implicit
27: #from psycopg import libpq
28: #from pyPgSQL import libpq
29: import xml.dom.minidom
30:
31: import urllib
32: import xml.dom.minidom
33: from ECHO_graphicalOverview import javaHandler,javaScriptMain
34:
35: #List of different types for the graphical linking viewer
36: viewClassificationListMaster=['view point','area']
37:
38:
39: def toList(field):
40: """Einzelfeld in Liste umwandeln"""
41: if type(field)==StringType:
42: return [field]
43: else:
44: return field
45:
46: def getText(nodelist):
47:
48: rc = ""
49: for node in nodelist:
50: if node.nodeType == node.TEXT_NODE:
51: rc = rc + node.data
52: return rc
53:
54:
55: def readMetadata(url):
56: """Methoden zum Auslesen der Metadateninformation zu einer Resource
57: Vorerst noch Typ bib"""
58:
59: metadict={}
60: try:
61: geturl=""
62: for line in urllib.urlopen(url).readlines():
63: geturl=geturl+line
64:
65:
66: except:
67: return (None,"Cannot open: "+url)
68:
69: try:
70: dom=xml.dom.minidom.parseString(geturl)
71: except:
72: return (None,"Cannot parse: "+url+"<br>"+geturl)
73:
74: metanode=dom.getElementsByTagName('bib')
75: metadict['bib_type']='Book'
76: if len(metanode)==0:
77: metanode=dom.getElementsByTagName('archimedes')
78: metadict['bib_type']='Archimedes'
79: #print "HELLO"
80:
81: if not len(metanode)==0:
82: metacontent=metanode[0].childNodes
83:
84: try:
85: metadict['bib_type']=getText(dom.getElementsByTagName('bib')[0].attributes['type'].childNodes)
86: except:
87: """nothing"""
88:
89: for node in metacontent:
90: try:
91: metadict[node.tagName.lower()]=getText(node.childNodes)
92: except:
93: """nothing"""
94:
95: #print metadict
96: return metadict,""
97:
98:
99: def setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordstrs,viewClassification=""):
100:
101: """Allegemeine Informationen zu einer ECHO Collection"""
102:
103: self.viewClassification=viewClassification
104:
105: self.label = label
106: self.title=title
107: self.description=description
108: self.contentType=contentType
109: self.responsible=responsible
110: self.credits=toList(credits)
111: self.weight=weight
112:
113: coords=[]
114: #coordinates of for rectangles
115:
116: #print "cs", coordstrs
117: if coordstrs:
118: for coordstr in coordstrs:
119: #print "cs", coordstr
120: try:
121: temco=coordstr.split(",")
122: except:
123: temco=[]
124: #temco.append(angle)
125: coords.append(temco)
126:
127:
128: self.coords=coords[0:]
129:
130:
131: class scientificClassification(SimpleItem,Persistent,Implicit):
132: """outdated will be deleeted in the next versions: subclass"""
133: security=ClassSecurityInfo()
134:
135: def __init__(self,context,science,practice):
136: self.context=context
137: self.science=science
138: self.practice=practice
139: self.id="scientific_Classification"
140:
141: security.declarePublic('get_context')
142: def get_context(self):
143: return self.context
144:
145: security.declarePublic('get_science')
146: def get_science(self):
147: return self.science
148:
149: security.declarePublic('get_practice')
150: def get_practice(self):
151: return self.practice
152:
153:
154: class scientificInformation(Folder,Persistent,Implicit):
155: """outdated will be deleted in the next versions: subclass scientificInformation"""
156: security=ClassSecurityInfo()
157:
158:
159:
160: def __init__(self,source_type,period):
161:
162: self.id="scientific_Information"
163: self.source_type=source_type
164: self.period=period
165:
166:
167:
168: security.declarePublic('get_source_type')
169: def get_source_type(self):
170: return self.source_type
171:
172: security.declarePublic('get_period')
173: def get_period(self):
174: return self.period
175:
176:
177: class ECHO_resource(Folder):
178: """ECHO Ressource"""
179: meta_type='ECHO_resource'
180:
181: viewClassificationList=viewClassificationListMaster
182:
183: def getViewClassification(self):
184: if hasattr(self,'viewClassification'):
185: return self.viewClassification
186: else:
187: return ""
188:
189: def getCredits(self):
190: """Ausgabe der credits"""
191: if self.credits:
192: return self.credits
193: else:
194: return []
195:
196: def __init__(self,id,link,metalink,title,label,description,contentType,responsible,credits,weight,coords):
197:
198: self.id = id
199: """Festlegen der ID"""
200:
201: self.label = label
202: self.link= link
203: self.metalink=metalink
204: self.title=title
205: self.weight=weight
206: self.credits=toList(credits)
207: self.description=description
208: self.contentType=contentType
209: self.responsible=responsible
210:
211: if coords:
212: coordsnew=[ string.split(x,",") for x in coords]
213: else:
214: coordsnew=[]
215:
216: self.coords=coordsnew
217:
218:
219: def getCoords(self):
220: try:
221: return [string.join(x,",") for x in self.coords]
222: except:
223: return []
224:
225:
226: def ECHO_resource_config(self):
227: """Main configuration"""
228:
229: if not hasattr(self,'weight'):
230: self.weight=""
231: if not hasattr(self,'coords'):
232: self.coords=[]
233:
234: print "vorher",self.coords
235: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resource.zpt').__of__(self)
236: return pt()
237:
238:
239: def changeECHO_resource(self,metalink,link,title,label,description,contentType,responsible,weight,viewClassification="",coords=None,credits=None,RESPONSE=None):
240: """Änderung der Properties"""
241:
242:
243: coordsnew=[ string.split(x,",") for x in coords]
244:
245:
246: setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordsnew)
247:
248: self.coords=coordsnew[0:]
249: self.link=link
250: self.metalink=metalink
251:
252: if RESPONSE is not None:
253: RESPONSE.redirect('manage_main')
254:
255:
256: manage_options = Folder.manage_options+(
257: {'label':'Main Config','action':'ECHO_resource_config'},
258: {'label':'Metadata','action':'ECHO_getResourceMD'},
259: {'label':'Graphics','action':'ECHO_graphicEntry'},
260: )
261:
262: def getOverview(self):
263: """overview graphics"""
264:
265: return self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['overview'])[0][1]
266:
267: def ECHO_graphicEntry(self):
268: """DO nothing"""
269: overview = self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['overview'])
270: if overview:
271: pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_draw.zpt').__of__(self)
272: return pt()
273: else:
274: return "NO OVERVIEW GRAPHICS"
275:
276: def ECHO_enterCoords(self,coordstr,angle="",RESPONSE=None):
277: """Enter coords"""
278: coords=self.coords
279: temco=coordstr.split(",")
280: temco.append(angle)
281: coords.append(temco)
282:
283: self.coords=coords[0:]
284:
285: if RESPONSE is not None:
286: RESPONSE.redirect('ECHO_graphicEntry')
287:
288: def ECHO_getResourceMD(self,template="yes"):
289: """Einlesen der Metadaten und Anlegen dieser Metadaten als Informationen zur Resource"""
290: (metadict, error)=readMetadata(self.metalink)
291:
292:
293:
294: if not error=="": #Fehler beim Auslesen des Metafiles
295: return "ERROR:",error
296: for key in metadict.keys():#Hinzufügen der Felder
297:
298: setattr(self,key,metadict[key].encode('ascii','replace'))
299:
300:
301: self.metadata=metadict.keys()
302:
303: self.label=self.generate_label()
304:
305: if template=="yes":
306: pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_resourceMD.zpt').__of__(self)
307: return pt()
308:
309: def ECHO_getMD(self,item):
310: """Ausgabe der MD"""
311: return getattr(self,item)
312:
313: def index_html(self):
314: """standard page"""
315:
316: return self.REQUEST.RESPONSE.redirect(self.link)
317:
318: def generate_label(self):
319: """Erzeugt_standard_Label aus Template"""
320: pt=getattr(self,"label_template_"+self.bib_type)
321:
322: return pt()
323:
324: def manage_addECHO_resourceForm(self):
325: """Form for adding a ressource"""
326: pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_resourceForm.zpt').__of__(self)
327: return pt()
328:
329:
330:
331: def manage_addECHO_resource(self,id,title,label,description,contentType,responsible,link,metalink,weight,credits=None,coords=None,RESPONSE=None):
332: """addaresource"""
333:
334: newObj=ECHO_resource(id,link,metalink,title,label,description,contentType,responsible,credits,weight,coords)
335:
336: self._setObject(id,newObj)
337:
338: if RESPONSE is not None:
339: RESPONSE.redirect('manage_main')
340:
341:
342: class ECHO_externalLink(Folder):
343: """Link zu einer externen Ressource"""
344: security=ClassSecurityInfo()
345: meta_type='ECHO_externalLink'
346:
347:
348: def __init__(self,id,link,title,label,description,contentType,responsible,credits,weight,coords):
349:
350: self.id = id
351: """Festlegen der ID"""
352:
353: self.credits=toList(credits)
354: self.label = label
355: self.link= link
356: self.title=title
357: self.weight=weight
358: self.description=description
359: self.contentType=contentType
360: self.responsible=responsible
361: coordsnew=[ string.split(x,",") for x in coords]
362: self.coords=coordsnew
363:
364: def ECHO_externalLink_config(self):
365: """Main configuration"""
366:
367: if not hasattr(self,'weight'):
368: self.weight=""
369: if not hasattr(self,'coords'):
370:
371: self.coords=['']
372: #print "G",self.coords
373:
374: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_externalLink.zpt').__of__(self)
375: return pt()
376:
377:
378: def changeECHO_externalLink(self,link,title,label,description,contentType,responsible,weight,coords=None,credits=None,RESPONSE=None):
379:
380: """Änderung der Properties"""
381: coordsnew=[ string.split(x,",") for x in coords]
382:
383: setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coords)
384:
385: self.coords=coordsnew[0:]
386: self.link=link
387: if RESPONSE is not None:
388: RESPONSE.redirect('manage_main')
389:
390:
391: manage_options = Folder.manage_options+(
392: {'label':'Main Config','action':'ECHO_externalLink_config'},
393: )
394:
395: def getCredits(self):
396: """Ausgabe der credits"""
397: if self.credits:
398: return self.credits
399: else:
400: return []
401:
402: def index_html(self):
403: """standard page"""
404:
405: return self.REQUEST.RESPONSE.redirect(self.link)
406:
407: def manage_addECHO_externalLinkForm(self):
408: """Form for external Links"""
409: pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_externalLinkForm.zpt').__of__(self)
410: return pt()
411:
412:
413: def manage_addECHO_externalLink(self,id,title,label,description,contentType,responsible,link,weight,coords=None,credits=None,RESPONSE=None):
414: """Add an external Link"""
415:
416: newObj=ECHO_externalLink(id,link,title,label,description,contentType,responsible,credits,weight,coords)
417:
418: self._setObject(id,newObj)
419:
420: if RESPONSE is not None:
421: RESPONSE.redirect('manage_main')
422:
423:
424:
425: class ECHO_collection(Folder, Persistent, Implicit):
426: """ECHO Collection"""
427: security=ClassSecurityInfo()
428: meta_type='ECHO_collection'
429:
430: def getImageTag(self):
431: """GetTag"""
432: try:
433: return self.imageTag
434: except:
435: return ""
436:
437: def addResource(self,id,title,label,description,contentType,responsible,link,metalink,weight,credits=None,coords=None,RESPONSE=None):
438: """SSS"""
439: try:
440: manage_addECHO_resource(self,id,title,label,description,contentType,responsible,link,metalink,weight,credits=None,coords=None,RESPONSE=None)
441: return "done"
442: except:
443: return None
444:
445: def getCollectionTreeXML(self):
446: """Tree as XML"""
447:
448: def getCollection(object,depth=0):
449: depth+=1
450: collections=""
451: for entry in object.__dict__.keys():
452: element=getattr(object,entry)
453: try:
454: if element.meta_type=="ECHO_collection":
455: collections+="<element name=\""+element.title+"\" url=\""+element.absolute_url()+"\">"
456: collections+=getCollection(element,depth)+"</element>\n"
457: except:
458: """nothing"""
459: return collections
460:
461:
462: return "<collection>"+getCollection(self)+"</collection>"
463:
464: def createJavaScript(self):
465: """CreateJava"""
466: ret=javaScriptMain
467:
468: dynamical=""
469: for ob in self.getGraphicCoords():
470: dynamical+="""Coords.push(new Coord('%s', Img, %s));\n"""%(ob[1],ob[0])
471: ret+=javaHandler%dynamical
472: return ret
473:
474: security.declarePublic('getCreditObject')
475: def getCreditObject(self,name):
476: """credit id to credititem"""
477: try:
478: return getattr(self.partners,name)
479: except:
480: return ""
481:
482: security.declarePublic('ECHO_generateNavBar')
483: def ECHO_generateNavBar(self):
484: """Erzeuge Navigationsbar"""
485: link=""
486: object="self"
487: ret=[]
488: path=self.getPhysicalPath()
489: for element in path:
490:
491:
492: if not element=="":
493: object+="."+element
494:
495: label=eval(object).label
496: link+="/"+element
497: if not label=="":
498: ret.append((label,link))
499: return ret
500:
501: security.declarePublic('ECHO_rerenderLinksMD')
502: def ECHO_rerenderLinksMD(self):
503: """Rerender all Links"""
504:
505: for entry in self.__dict__.keys():
506: object=getattr(self,entry)
507:
508:
509: try:
510:
511: if object.meta_type == 'ECHO_resource':
512:
513: object.ECHO_getResourceMD(template="no")
514:
515: except:
516: """nothing"""
517:
518: return "Rerenderd all links to resources in: "+self.title
519:
520: security.declarePublic('ECHO_newViewerLink')
521:
522:
523: def getCoords(self):
524: try:
525:
526: x= [string.join(x,",") for x in self.coords]
527: return x
528:
529: except:
530:
531: return []
532:
533: def __init__(self,id,title,label,description,contentType,responsible,credits,weight,sortfield,coords,imageTag=""):
534: #print "CO",coords
535:
536: self.id = id
537: """Festlegen der ID"""
538: self.credits=toList(credits)
539: self.label = label
540: self.title=title
541: self.description=description
542: self.contentType=contentType
543: self.responsible=responsible
544: self.imageTag=imageTag
545: self.weight=weight
546: self.sortfield=sortfield
547: coordsnew=[ string.split(x,",") for x in coords]
548: self.coords=coordsnew
549:
550:
551: manage_options = Folder.manage_options+(
552: {'label':'Main Config','action':'ECHO_collection_config'},
553: {'label':'Rerender Links','action':'ECHO_rerenderLinksMD'},
554: {'label':'Graphics','action':'ECHO_graphicEntry'},
555:
556: )
557:
558: def getOverview(self):
559: """overview graphics"""
560:
561: return self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['overview'])[0][1]
562:
563:
564: def ECHO_graphicEntry(self):
565: """DO nothing"""
566: overview = self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['overview'])
567:
568:
569: if overview:
570: pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_draw.zpt').__of__(self)
571: return pt()
572: else:
573: return "NO OVERVIEW GRAPHICS"
574:
575: def ECHO_enterCoords(self,coordstr,angle="",RESPONSE=None):
576: """Enter coords"""
577: coords=self.coords
578: temco=coordstr.split(",")
579: temco.append(angle)
580: coords.append(temco)
581: self.coords=coords[0:]
582:
583: if RESPONSE is not None:
584: RESPONSE.redirect('ECHO_graphicEntry')
585:
586:
587: security.declarePublic('ECHO_collection_config')
588: def ECHO_collection_config(self):
589: """Main configuration"""
590:
591: if not hasattr(self,'weight'):
592: self.weight=""
593:
594: if not hasattr(self,'sortfield'):
595: self.sortfield="weight"
596:
597: if not hasattr(self,'coords'):
598: self.coords=[]
599:
600: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_collection.zpt').__of__(self)
601: return pt()
602:
603:
604: security.declarePublic('changeECHO_collection')
605:
606:
607: def changeECHO_collection(self,title,label,description,contentType,responsible,weight,credits=None,sortfield="weight",coords=None,RESPONSE=None,imageTag=""):
608: """Änderung der Properties"""
609:
610: self.imageTag=imageTag
611: coordsnew=[ string.split(x,",") for x in coords]
612:
613: setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordsnew)
614:
615: self.coords=coordsnew[0:]
616: self.sortfield=sortfield
617:
618: if RESPONSE is not None:
619: RESPONSE.redirect('manage_main')
620:
621: security.declarePublic('index_html')
622:
623:
624: def showOverview(self):
625: """overview"""
626: if 'ECHO_overview.html' in self.__dict__.keys():
627: return getattr(self,'ECHO_overview.html')()
628: pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_content_overview.zpt').__of__(self)
629: return pt()
630:
631:
632: def index_html(self):
633: """standard page"""
634:
635: if 'index.html' in self.__dict__.keys():
636: return getattr(self,'index.html')()
637: elif 'overview' in self.__dict__.keys():
638: return self.showOverview()
639:
640:
641: pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_content_standard.zpt').__of__(self)
642: pt.contentType="text/html"
643: return pt()
644:
645: def getCredits(self):
646: """Ausgabe der credits"""
647: if self.credits:
648: return self.credits
649: else:
650: return []
651:
652:
653:
654: def getGraphicCoords(self):
655: """Give list of coordinates"""
656: subColTypes=['ECHO_collection','ECHO_externalLink','ECHO_resource']
657: ids=[]
658: for entry in self.__dict__.keys():
659: object=getattr(self,entry)
660: try:
661: if object.meta_type in subColTypes:
662: for coordtemp in object.coords:
663: if len(coordtemp)>3:
664: coord=coordtemp[0:4]
665: if hasattr(object,'label') and not object.label=="":
666: ids.append([string.join(coord,", "),object.getId(),object.label,object])
667: elif hasattr(object,'title'):
668: if not object.title=="":
669: ids.append([string.join(coord,", "),object.getId(),object.title,object])
670: else:
671: ids.append([string.join(coord,", "),object.getId(),object.getId(),object])
672: else:
673: ids.append([string.join(coord,", "),object.getId(),object.getId(),object])
674:
675: except:
676: """nothing"""
677:
678: return ids
679:
680: def getSubCols(self,sortfield="weight"):
681:
682: subColTypes=['ECHO_collection','ECHO_externalLink','ECHO_resource']
683: ids=[]
684: for entry in self.__dict__.keys():
685: object=getattr(self,entry)
686: try:
687: if object.meta_type in subColTypes:
688: ids.append(object)
689:
690: except:
691: """nothing"""
692: try:
693: sortfield=self.sortfield
694: except:
695: """nothing"""
696:
697: tmplist=[]
698: for x in ids:
699: if hasattr(x,sortfield):
700: try:
701: x=int(x)
702: except:
703: """nothing"""
704: tmp=getattr(x,sortfield)
705: else:
706: tmp=10000000
707: tmplist.append((tmp,x))
708: tmplist.sort()
709: return [x for (key,x) in tmplist]
710:
711:
712:
713:
714:
715:
716: def manage_addECHO_collectionForm(self):
717: """Add collection form"""
718: pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_collectionForm.zpt').__of__(self)
719: return pt()
720:
721:
722: def manage_addECHO_collection(self,id,title,label,description,contentType,responsible,weight,sortfield,coords="",credits=None,RESPONSE=None,imageTag=""):
723: """add a echo collection"""
724:
725:
726: newObj=ECHO_collection(id,title,label,description,contentType,responsible,credits,weight,sortfield,coords,imageTag)
727:
728: self._setObject(id,newObj)
729:
730: if RESPONSE is not None:
731: RESPONSE.redirect('manage_main')
732:
733: class ECHO_root(Folder,Persistent,Implicit):
734: """ECHO Root Folder"""
735: meta_type="ECHO_root"
736:
737:
738: def patchContentType(self,obj=None):
739: """austauschen content_type with contentType (patch bei umstieg von alter Version)"""
740:
741:
742: if not obj:
743: obj = self
744:
745: entries=obj.ZopeFind(obj,obj_metatypes=['ECHO_resource','ECHO_collection,ECHO_externalLink'])
746:
747: for entry in entries:
748:
749: entry[1].contentType == entry[1].content_type
750:
751: if entry[1].meta_type == 'ECHO_collection':
752: entry[1].patchContentType(entry[1])
753:
754:
755: return "Rerenderd all links to resources in: "+self.title
756:
757: def ECHO_newViewerLink(self,obj=None):
758: """change links (:86 faellt weg)"""
759:
760: if not obj:
761: obj = self
762:
763: entries=obj.ZopeFind(obj,obj_metatypes=['ECHO_resource','ECHO_collection'])
764:
765: for entry in entries:
766:
767: if entry[1].meta_type == 'ECHO_resource':
768:
769: entry[1].link=re.sub('\:86','',entry[1].link)
770:
771: else:
772:
773: entry[1].ECHO_newViewerLink(entry[1])
774:
775: return "Rerenderd all links to resources in: "+self.title
776:
777: def __init__(self,id,title):
778: """init"""
779: self.id = id
780: self.title=title
781:
782: def deleteSpace(self,str):
783: """delete space at the end of a line"""
784: if str[len(str)-1]==" ":
785: return str[0:len(str)-1]
786: else:
787: return str
788:
789:
790:
791: # zusaetliche methoden fuer das vlp muessen in ein eigenes produkt
792:
793: def formatAscii(self,str,url=None):
794: """ersetze ascii umbrueche durch <br>"""
795: #url=None
796: if url:
797:
798: retStr=""
799: words=str.split("\n")
800:
801: for word in words:
802: strUrl=url%word
803: print "str",strUrl
804: retStr+="""<a href="%s">%s</a><br/>"""%(strUrl,word)
805: str=retStr
806: if str:
807: return re.sub(r"[\n]","<br/>",str)
808: else:
809: return ""
810:
811: def link2html(self,str):
812: """link2html fuer VLP muss hier noch raus"""
813: if str:
814: print str
815: str=re.sub("\&","&",str)
816: dom=xml.dom.minidom.parseString("<?xml version='1.0' ?><txt>"+str+"</txt>")
817: links=dom.getElementsByTagName("link")
818:
819: print "link",links
820: for link in links:
821: link.tagName="a"
822: ref=link.getAttribute("ref")
823: if self.checkRef(ref):
824: link.setAttribute("href",self.aq_parent.absolute_url()+"/vlp_coll?id="+ref)
825:
826: return dom.toxml('utf-8')
827: return ""
828:
829:
830: def checkRef(self,ref):
831: dbs={'vl_literature':'AND CD LIKE \'%lise%\'','vl_technology':'','vl_people':''}
832: res=None
833: for db in dbs.keys():
834: #print ref,"select reference from %s where reference =\'%s\' %s"%(db,ref,dbs[db])
835:
836: res=res or self.search(var=str("select reference from %s where reference =\'%s\' %s"%(db,ref,dbs[db])))
837: return res
838:
839: #Ende Methode fuer vlp
840:
841: def PgQuoteString(self,string):
842: """Quote string"""
843: #print "PG",string
844: return libpq.PgQuoteString(string)
845:
846: def getPartners(self):
847: """Get list of Partners. Presently only from a subfolder partners"""
848:
849: return [ item[1] for item in self.partners.ZopeFind(self.partners,obj_metatypes=['ECHO_partner'])]
850:
851:
852:
853:
854:
855: def getPartnersXML(self):
856: """partner liste als xml"""
857: partners=self.getPartners()
858: ret="<partners>"
859: for partner in partners:
860: ret+="""<partner id="%s" title="%s"/>\n"""%(partner.getId(),partner.title)
861:
862: return ret+"\n</partners>"
863:
864: def getCollectionTree(self):
865: """get the collection tree (list of triples (parent,child, depth)"""
866:
867: def getCollection(object,depth=0):
868: depth+=1
869: collections=[]
870: for entry in object.__dict__.keys():
871: element=getattr(object,entry)
872: try:
873: if element.meta_type=="ECHO_collection":
874: collections.append((object,element,depth))
875: collections+=getCollection(element,depth)
876: except:
877: """nothing"""
878: return collections
879:
880:
881: return getCollection(self)
882:
883: def getCollectionTreeIds(self):
884: """Show the IDs of the Tree"""
885: ret=[]
886: for collection in self.getCollectionTree():
887: ret.append((collection[0].getId(),collection[1].getId(),collection[2]))
888: return ret
889:
890:
891:
892: def manage_addECHO_root(self,id,title,RESPONSE=None):
893: """Add an ECHO_root"""
894: self._setObject(id,ECHO_root(id,title))
895:
896: if RESPONSE is not None:
897: RESPONSE.redirect('manage_main')
898:
899: def manage_addECHO_rootForm(self):
900: """Nothing yet"""
901: pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_root.zpt').__of__(self)
902: return pt()
903:
904: class ECHO_partner(Image,Persistent):
905: """ECHO Partner"""
906:
907: meta_type="ECHO_partner"
908:
909: def __init__(self, id, title,url, file, contentType='', precondition=''):
910: self.__name__=id
911: self.title=title
912: self.url=url
913: self.precondition=precondition
914:
915: data, size = self._read_data(file)
916: contentType=self._get_contentType(file, data, id, contentType)
917: self.update_data(data, contentType, size)
918:
919: manage_options = Image.manage_options+(
920: {'label':'Partner Information','action':'ECHO_partner_config'},
921: )
922:
923: def changeECHO_partner(self,url,RESPONSE=None):
924: """Change main information"""
925: self.url=url
926: if RESPONSE is not None:
927: RESPONSE.redirect('manage_main')
928:
929:
930:
931: def ECHO_partner_config(self):
932: """Main configuration"""
933: if not hasattr(self,'url'):
934: self.url=""
935: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_partner.zpt').__of__(self)
936: return pt()
937:
938:
939: manage_addECHO_partnerForm=DTMLFile('dtml/ECHO_partnerAdd',globals(),
940: Kind='ECHO_partner',kind='ECHO_partner')
941:
942:
943:
944: def manage_addECHO_partner(self, id, file,url, title='', precondition='', contentType='',
945: REQUEST=None):
946: """
947: Add a new ECHO_partner object.
948:
949: Creates a new ECHO_partner object 'id' with the contents of 'file'.
950: Based on Image.manage_addImage
951: """
952:
953: id=str(id)
954: title=str(title)
955: contentType=str(contentType)
956: precondition=str(precondition)
957:
958: id, title = OFS.Image.cookId(id, title, file)
959:
960: self=self.this()
961:
962: # First, we create the image without data:
963: self._setObject(id, ECHO_partner(id,title,url,'',contentType, precondition))
964:
965: # Now we "upload" the data. By doing this in two steps, we
966: # can use a database trick to make the upload more efficient.
967: if file:
968: self._getOb(id).manage_upload(file)
969: if contentType:
970: self._getOb(id).contentType=contentType
971:
972: if REQUEST is not None:
973: try: url=self.DestinationURL()
974: except: url=REQUEST['URL1']
975: REQUEST.RESPONSE.redirect('%s/manage_main' % url)
976: return id
977:
978:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>