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