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