--- ECHO_content/ECHO_collection.py 2004/04/02 17:38:11 1.26 +++ ECHO_content/ECHO_collection.py 2004/04/18 19:40:13 1.48 @@ -11,6 +11,7 @@ class ECHO_externalLink contains informa """ import string import re +import os import OFS.Image from types import * from OFS.Image import Image @@ -22,8 +23,10 @@ from Globals import InitializeClass from Globals import DTMLFile from Products.PageTemplates.PageTemplateFile import PageTemplateFile from Products.PageTemplates.PageTemplate import PageTemplate -from Globals import Persistent +from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate +from Globals import Persistent, package_home from Acquisition import Implicit + #from psycopg import libpq #from pyPgSQL import libpq import xml.dom.minidom @@ -31,11 +34,26 @@ import xml.dom.minidom import urllib import xml.dom.minidom from ECHO_graphicalOverview import javaHandler,javaScriptMain +import ECHO_helpers #List of different types for the graphical linking viewer viewClassificationListMaster=['view point','area'] +def content_html(self,type): + """template fuer content""" + #templates = self.ZopeFind(self.aq_parent,obj_ids=[type+"_template"]) + # + #if templates: + # return templates[0][1]() + try: + obj=getattr(self,type+"_template") + return obj() + except: + pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_%s_template_standard.zpt'%type).__of__(self) + pt.content_type="text/html" + return pt() + def toList(field): """Einzelfeld in Liste umwandeln""" if type(field)==StringType: @@ -96,7 +114,7 @@ def readMetadata(url): return metadict,"" -def setECHO_collectionInformation(self,title,label,description,content_type,responsible,credits,weight,coordstrs,viewClassification=""): +def setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordstrs,viewClassification=""): """Allegemeine Informationen zu einer ECHO Collection""" @@ -105,7 +123,7 @@ def setECHO_collectionInformation(self,t self.label = label self.title=title self.description=description - self.content_type=content_type + self.contentType=contentType self.responsible=responsible self.credits=toList(credits) self.weight=weight @@ -173,6 +191,73 @@ class scientificInformation(Folder,Persi def get_period(self): return self.period +class ECHO_layoutTemplate(ZopePageTemplate): + """Create a layout Template for different purposes""" + + meta_type="ECHO_layoutTemplate" + + def __init__(self, id, text=None, content_type=None,EchoType=None): + self.id = str(id) + + + + self.ZBindings_edit(self._default_bindings) + if text is None: + self._default_content_fn = os.path.join(package_home(globals()), + 'zpt/ECHO_%s_template_standard.zpt'%EchoType) + text = open(self._default_content_fn).read() + self.pt_edit(text, content_type) + + + """change form""" + + +def manage_addECHO_layoutTemplateForm(self): + """Form for adding""" + pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_layoutTemplate.zpt').__of__(self) + return pt() + +from urllib import quote + + +def manage_addECHO_layoutTemplate(self, EchoType,title=None,REQUEST=None): + "Add a Page Template with optional file content." + if type(EchoType)==StringType: + EchoTypes=[EchoType] + else: + EchoTypes=EchoType + + for singleType in EchoTypes: + + id = str(singleType)+"_template" + if REQUEST is None: + self._setObject(id, ECHO_layoutTemplate(id, text,EchoType=singleType)) + ob = getattr(self, id) + + if title: + ob.pt_setTitle(title) + return ob + else: + file = REQUEST.form.get('file') + headers = getattr(file, 'headers', None) + if headers is None or not file.filename: + zpt = ECHO_layoutTemplate(id,EchoType=singleType) + else: + zpt = ECHO_layoutTemplate(id, file, headers.get('content_type')) + + self._setObject(id, zpt) + ob = getattr(self, id) + if title: + ob.pt_setTitle(title) + + try: + u = self.DestinationURL() + except AttributeError: + u = REQUEST['URL1'] + + + REQUEST.RESPONSE.redirect(u+'/manage_main') + return '' class ECHO_resource(Folder): """ECHO Ressource""" @@ -180,6 +265,19 @@ class ECHO_resource(Folder): viewClassificationList=viewClassificationListMaster + getSubCols = ECHO_helpers.getSubCols + def getTitle(self): + """title""" + return self.title.encode('utf-8') + + def getLabel(self): + """title""" + return self.label.encode('utf-8') + + def content_html(self): + """template fuer content""" + return content_html(self,'resource') + def getViewClassification(self): if hasattr(self,'viewClassification'): return self.viewClassification @@ -193,7 +291,7 @@ class ECHO_resource(Folder): else: return [] - def __init__(self,id,link,metalink,title,label,description,content_type,responsible,credits,weight,coords): + def __init__(self,id,link,metalink,title,label,description,contentType,responsible,credits,weight,coords): self.id = id """Festlegen der ID""" @@ -205,7 +303,7 @@ class ECHO_resource(Folder): self.weight=weight self.credits=toList(credits) self.description=description - self.content_type=content_type + self.contentType=contentType self.responsible=responsible if coords: @@ -236,14 +334,15 @@ class ECHO_resource(Folder): return pt() - def changeECHO_resource(self,metalink,link,title,label,description,content_type,responsible,weight,viewClassification="",coords=None,credits=None,RESPONSE=None): + def changeECHO_resource(self,metalink,link,title,label,description,contentType,responsible,weight,viewClassification="",coords=None,credits=None,RESPONSE=None): """Änderung der Properties""" + try: + coordsnew=[ string.split(x,",") for x in coords] + except: + coordsnew=[] - coordsnew=[ string.split(x,",") for x in coords] - - - setECHO_collectionInformation(self,title,label,description,content_type,responsible,credits,weight,coordsnew) + setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordsnew) self.coords=coordsnew[0:] self.link=link @@ -328,10 +427,10 @@ def manage_addECHO_resourceForm(self): -def manage_addECHO_resource(self,id,title,label,description,content_type,responsible,link,metalink,weight,credits=None,coords=None,RESPONSE=None): +def manage_addECHO_resource(self,id,title,label,description,contentType,responsible,link,metalink,weight,credits=None,coords=None,RESPONSE=None): """addaresource""" - newObj=ECHO_resource(id,link,metalink,title,label,description,content_type,responsible,credits,weight,coords) + newObj=ECHO_resource(id,link,metalink,title,label,description,contentType,responsible,credits,weight,coords) self._setObject(id,newObj) @@ -344,8 +443,19 @@ class ECHO_externalLink(Folder): security=ClassSecurityInfo() meta_type='ECHO_externalLink' - - def __init__(self,id,link,title,label,description,content_type,responsible,credits,weight,coords): + def getTitle(self): + """title""" + return self.title.encode('utf-8') + + def getLabel(self): + """title""" + return self.label.encode('utf-8') + + def content_html(self): + """template fuer content""" + return content_html(self,'externalLink') + + def __init__(self,id,link,title,label,description,contentType,responsible,credits,weight,coords): self.id = id """Festlegen der ID""" @@ -356,7 +466,7 @@ class ECHO_externalLink(Folder): self.title=title self.weight=weight self.description=description - self.content_type=content_type + self.contentType=contentType self.responsible=responsible coordsnew=[ string.split(x,",") for x in coords] self.coords=coordsnew @@ -375,12 +485,15 @@ class ECHO_externalLink(Folder): return pt() - def changeECHO_externalLink(self,link,title,label,description,content_type,responsible,weight,coords=None,credits=None,RESPONSE=None): + def changeECHO_externalLink(self,link,title,label,description,contentType,responsible,weight,coords=None,credits=None,RESPONSE=None): """Änderung der Properties""" - coordsnew=[ string.split(x,",") for x in coords] + try: + coordsnew=[ string.split(x,",") for x in coords] + except: + coordsnew=[] - setECHO_collectionInformation(self,title,label,description,content_type,responsible,credits,weight,coords) + setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coords) self.coords=coordsnew[0:] self.link=link @@ -410,10 +523,10 @@ def manage_addECHO_externalLinkForm(self return pt() -def manage_addECHO_externalLink(self,id,title,label,description,content_type,responsible,link,weight,coords=None,credits=None,RESPONSE=None): +def manage_addECHO_externalLink(self,id,title,label,description,contentType,responsible,link,weight,coords=None,credits=None,RESPONSE=None): """Add an external Link""" - newObj=ECHO_externalLink(id,link,title,label,description,content_type,responsible,credits,weight,coords) + newObj=ECHO_externalLink(id,link,title,label,description,contentType,responsible,credits,weight,coords) self._setObject(id,newObj) @@ -427,6 +540,32 @@ class ECHO_collection(Folder, Persistent security=ClassSecurityInfo() meta_type='ECHO_collection' + def getTitle(self): + """title""" + return self.title.encode('utf-8') + + def getLabel(self): + """title""" + return self.label.encode('utf-8') + + def createRessourcesFromXMLForm(self): + """form""" + pt=PageTemplateFile('Products/ECHO_content/zpt/createRessourcesFromXMLForm.zpt').__of__(self) + return pt() + def createRessourcesFromXML(self,fileupload): + """read an XML file for generating resources""" + dom=xml.dom.minidom.parse(fileupload) + ret="

Added

" + for resource in dom.getElementsByTagName('resource'): + link=getText(resource.getElementsByTagName('link')[0].childNodes) + label=getText(resource.getElementsByTagName('label')[0].childNodes) + #splitted=link.split("?")[0].split("/") + #id=splitted[len(splitted)-1].encode('ascii') + id=re.sub(" ","_",label).encode('ascii') + + ret+="

"+label+"

" + manage_addECHO_resource(self,id,label.encode('ascii'),label.encode('ascii'),"","","",link.encode('ascii'),"","") + return ret def getImageTag(self): """GetTag""" try: @@ -434,14 +573,28 @@ class ECHO_collection(Folder, Persistent except: return "" - def addResource(self,id,title,label,description,content_type,responsible,link,metalink,weight,credits=None,coords=None,RESPONSE=None): + def addResource(self,id,title,label,description,contentType,responsible,link,metalink,weight,credits=None,coords=None,RESPONSE=None): """SSS""" try: - manage_addECHO_resource(self,id,title,label,description,content_type,responsible,link,metalink,weight,credits=None,coords=None,RESPONSE=None) + manage_addECHO_resource(self,id,title,label,description,contentType,responsible,link,metalink,weight,credits=None,coords=None,RESPONSE=None) return "done" except: return None - + + def getSecondaryLink(self): + """secondary link""" + try: + return self.secondaryLink + except: + return "" + + def getSecondaryLinkTitle(self): + """secondary link""" + try: + return self.secondaryLinkTitle + except: + return "" + def getCollectionTreeXML(self): """Tree as XML""" @@ -451,7 +604,7 @@ class ECHO_collection(Folder, Persistent for entry in object.__dict__.keys(): element=getattr(object,entry) try: - if element.meta_type=="ECHO_collection": + if element.meta_type in ["ECHO_collection","ECHO_group"]: collections+="" collections+=getCollection(element,depth)+"\n" except: @@ -467,7 +620,11 @@ class ECHO_collection(Folder, Persistent dynamical="" for ob in self.getGraphicCoords(): - dynamical+="""Coords.push(new Coord('%s', Img, %s));\n"""%(ob[1],ob[0]) + if ob[4][4] == "": + dynamical+="""Coords.push(new Coord('%s', Img, %s));\n"""%(ob[1],ob[0]) + else: + dynamical+="""Coords.push(new Coord('%s', Img, %s));//%s\n"""%(ob[1],ob[0],ob[4][4]) + dynamical+="ShowArrow(new getObj('i.%s'),Img,%s);\n"%(ob[1],ob[0]) ret+=javaHandler%dynamical return ret @@ -530,7 +687,7 @@ class ECHO_collection(Folder, Persistent return [] - def __init__(self,id,title,label,description,content_type,responsible,credits,weight,sortfield,coords,imageTag=""): + def __init__(self,id,title,label,description,contentType,responsible,credits,weight,sortfield,coords,secondaryLinkTitle,secondaryLink,imageTag="",bgcolour=""): #print "CO",coords self.id = id @@ -539,19 +696,23 @@ class ECHO_collection(Folder, Persistent self.label = label self.title=title self.description=description - self.content_type=content_type + self.contentType=contentType self.responsible=responsible self.imageTag=imageTag self.weight=weight self.sortfield=sortfield coordsnew=[ string.split(x,",") for x in coords] self.coords=coordsnew - + self.secondaryLinkTitle=secondaryLinkTitle + self.secondaryLink=secondaryLink + self.bgcolour=bgcolour + manage_options = Folder.manage_options+( {'label':'Main Config','action':'ECHO_collection_config'}, {'label':'Rerender Links','action':'ECHO_rerenderLinksMD'}, {'label':'Graphics','action':'ECHO_graphicEntry'}, + {'label':'create resources from XML','action':'createRessourcesFromXMLForm'}, ) @@ -604,15 +765,34 @@ class ECHO_collection(Folder, Persistent security.declarePublic('changeECHO_collection') - def changeECHO_collection(self,title,label,description,content_type,responsible,weight,credits=None,sortfield="weight",coords=None,RESPONSE=None,imageTag=""): + def getBgcolour(self): + """colour""" + if hasattr(self,'bgcolour') and not (self.bgcolour==""): + return self.bgcolour + else: + return "#dddddd" + + def changeECHO_collection(self,title,label,description,contentType,responsible,weight,secondaryLink,secondaryLinkTitle,credits=None,sortfield="weight",coords=None,RESPONSE=None,imageTag="",bgcolour=""): """Änderung der Properties""" + self.secondaryLink=secondaryLink + self.secondaryLinkTitle=secondaryLinkTitle self.imageTag=imageTag - coordsnew=[ string.split(x,",") for x in coords] - - setECHO_collectionInformation(self,title,label,description,content_type,responsible,credits,weight,coordsnew) - - self.coords=coordsnew[0:] + self.bgcolour=bgcolour + + if coords: + coordsnew=[ string.split(x,",") for x in coords] + self.coords=coordsnew[0:] + else: + coordsnew=None + self.coords=None + + setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordsnew) + try: + self.coords=coordsnew[0:] # HACK fehler in setECHO_collection + except: + """none""" + self.sortfield=sortfield if RESPONSE is not None: @@ -634,14 +814,20 @@ class ECHO_collection(Folder, Persistent if 'index.html' in self.__dict__.keys(): return getattr(self,'index.html')() + elif 'overview' in self.__dict__.keys(): return self.showOverview() - + elif hasattr(self,'collection_index_template'): + return self.collection_index_template() pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_content_standard.zpt').__of__(self) pt.content_type="text/html" return pt() + def content_html(self): + """template fuer content""" + return content_html(self,'collection') + def getCredits(self): """Ausgabe der credits""" if self.credits: @@ -663,53 +849,25 @@ class ECHO_collection(Folder, Persistent if len(coordtemp)>3: coord=coordtemp[0:4] if hasattr(object,'label') and not object.label=="": - ids.append([string.join(coord,", "),object.getId(),object.label,object]) + ids.append([string.join(coord,", "),object.getId(),object.label,object,coordtemp]) elif hasattr(object,'title'): if not object.title=="": - ids.append([string.join(coord,", "),object.getId(),object.title,object]) + ids.append([string.join(coord,", "),object.getId(),object.title,object,coordtemp]) else: - ids.append([string.join(coord,", "),object.getId(),object.getId(),object]) + ids.append([string.join(coord,", "),object.getId(),object.getId(),object,coordtemp]) else: - ids.append([string.join(coord,", "),object.getId(),object.getId(),object]) + ids.append([string.join(coord,", "),object.getId(),object.getId(),object,coordtemp]) except: """nothing""" return ids - def getSubCols(self,sortfield="weight"): - subColTypes=['ECHO_collection','ECHO_externalLink','ECHO_resource'] - ids=[] - for entry in self.__dict__.keys(): - object=getattr(self,entry) - try: - if object.meta_type in subColTypes: - ids.append(object) - - except: - """nothing""" - try: - sortfield=self.sortfield - except: - """nothing""" - - tmplist=[] - for x in ids: - if hasattr(x,sortfield): - try: - x=int(x) - except: - """nothing""" - tmp=getattr(x,sortfield) - else: - tmp=10000000 - tmplist.append((tmp,x)) - tmplist.sort() - return [x for (key,x) in tmplist] + + + getSubCols = ECHO_helpers.getSubCols - - @@ -719,23 +877,143 @@ def manage_addECHO_collectionForm(self): return pt() -def manage_addECHO_collection(self,id,title,label,description,content_type,responsible,weight,sortfield,coords="",credits=None,RESPONSE=None,imageTag=""): +def manage_addECHO_collection(self,id,title,label,description,contentType,responsible,weight,sortfield,coords="",secondaryLinkTitle="",secondaryLink="",credits=None,RESPONSE=None,imageTag="",bgcolour=""): """add a echo collection""" - newObj=ECHO_collection(id,title,label,description,content_type,responsible,credits,weight,sortfield,coords,imageTag) + newObj=ECHO_collection(id,title,label,description,contentType,responsible,credits,weight,sortfield,coords,secondaryLinkTitle=secondaryLinkTitle,secondaryLink=secondaryLink,imageTag=imageTag,bgcolour="") self._setObject(id,newObj) if RESPONSE is not None: RESPONSE.redirect('manage_main') +class ECHO_group(ECHO_collection): + """ECHO Gruppe""" + meta_type="ECHO_group" + + manage_options = Folder.manage_options+( + {'label':'Main Config','action':'ECHO_group_config'}, + {'label':'Rerender Links','action':'ECHO_rerenderLinksMD'}, + {'label':'Graphics','action':'ECHO_graphicEntry'}, + ) + def ECHO_group_config(self): + """Main configuration""" + + if not hasattr(self,'weight'): + self.weight="" + + if not hasattr(self,'sortfield'): + self.sortfield="weight" + + if not hasattr(self,'coords'): + self.coords=[] + + pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_group.zpt').__of__(self) + return pt() + + def changeECHO_group(self,title,label,description,contentType,responsible,weight,secondaryLink,secondaryLinkTitle,credits=None,sortfield="weight",coords=None,RESPONSE=None,imageTag="",bgcolour="",logo=""): + """Änderung der Properties""" + + self.secondaryLink=secondaryLink + self.secondaryLinkTitle=secondaryLinkTitle + self.imageTag=imageTag + self.bgcolour=bgcolour + self.logo=logo + + if coords: + coordsnew=[ string.split(x,",") for x in coords] + self.coords=coordsnew[0:] + else: + coordsnew=None + self.coords=None + + setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordsnew) + + + + self.sortfield=sortfield + + if RESPONSE is not None: + RESPONSE.redirect('manage_main') + + def getLogo(self): + """logo ausgeben""" + try: + return self.logo + except: + return "ECHO_groups" + + def content_html(self): + """template fuer content""" + return content_html(self,'group') + + + +def manage_addECHO_groupForm(self): + """Add group form""" + pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_groupForm.zpt').__of__(self) + return pt() + + +def manage_addECHO_group(self,id,title,label,description,contentType,responsible,weight,sortfield,coords="",secondaryLinkTitle="",secondaryLink="",credits=None,RESPONSE=None,imageTag="",bgcolour="",logo=""): + """add a echo group""" + + + newObj=ECHO_group(id,title,label,description,contentType,responsible,credits,weight,sortfield,coords,secondaryLinkTitle=secondaryLinkTitle,secondaryLink=secondaryLink,imageTag=imageTag,bgcolour="") + + setattr(newObj,'logo',logo) + self._setObject(id,newObj) + + if RESPONSE is not None: + RESPONSE.redirect('manage_main') + + + class ECHO_root(Folder,Persistent,Implicit): """ECHO Root Folder""" meta_type="ECHO_root" + def getBgcolour(self): + """hack""" + return "#dddddd" + + def contentTypeSelector_HTML(self,selected=None): + """give type selector""" + if not selected: + retStr="