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