--- ECHO_content/ECHO_collection.py 2004/04/05 14:19:24 1.30 +++ ECHO_content/ECHO_collection.py 2004/05/10 16:26:02 1.79 @@ -26,18 +26,48 @@ from Products.PageTemplates.PageTemplate from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate from Globals import Persistent, package_home from Acquisition import Implicit - -#from psycopg import libpq -#from pyPgSQL import libpq +from ECHO_helpers import displayTypes +try: + from psycopg import libpq +except: + try: + from pyPgSQL import libpq + except: + print "ECHO_collection: Warning - No libpq imported!" + 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 checkDiffs(self,metadict): + """check differences""" + + def NoneToEmpty(obj): + if obj: + return obj + else: + return "" + + diffs={} + tags=self.findTagsFromMapping(self.contentType) + for field in tags[1]: + try: + if (NoneToEmpty(self.getFieldValue(self.getFieldTag(tags,field)))==metadict[self.getFieldTag(tags,field)]): + diffs[self.getFieldTag(tags,field)]=1 + else: + print "DIFF",field,self.getFieldValue(self.getFieldTag(tags,field)),metadict[self.getFieldTag(tags,field)] + diffs[self.getFieldTag(tags,field)]=0 + except: + diffs[self.getFieldTag(tags,field)]=0 + print "EX",field + return diffs + def content_html(self,type): """template fuer content""" #templates = self.ZopeFind(self.aq_parent,obj_ids=[type+"_template"]) @@ -69,8 +99,81 @@ def getText(nodelist): return rc +def sendFile(self, filename, type): + """sends an object or a local file (in the product) as response""" + paths = filename.split('/') + object = self + # look for an object called filename + for path in paths: + if hasattr(object, path): + object = getattr(object, path) + else: + object = None + break + if object: + # if the object exists then send it + return object.index_html(self.REQUEST.REQUEST, self.REQUEST.RESPONSE) + else: + # send a local file with the given content-type + fn = os.path.join(package_home(globals()), filename) + self.REQUEST.RESPONSE.setHeader("Content-Type", type) + self.REQUEST.RESPONSE.write(file(fn).read()) + return + + +def writeMetadata(url,metadict): + """Einlesen der Metadaten und und erstellen des geänderten XML file""" + + try: + geturl="" + for line in urllib.urlopen(url).readlines(): + geturl=geturl+line + + + except: + return (None,"Cannot open: "+url) + + try: + dom=xml.dom.minidom.parseString(geturl) + except: + return (None,"Cannot parse: "+url+"
"+geturl) + + metanodes=dom.getElementsByTagName('bib') + + if not metanodes: + metanodes=dom.getElementsByTagName('archimedes') + + metanode=metanodes[0] + + for metaData in metadict.keys(): + print metaData,metanode + try: + nodeOld=metanode.getElementsByTagName(metaData) + except: + nodeOld=None + + if nodeOld: + metanode.removeChild(nodeOld[0]).unlink() + else: + # try also old writing rule - instead of _: + try: + nodeOld=metanode.getElementsByTagName(re.sub('_','-',metaData)) + except: + nodeOld=None + + if nodeOld: + metanode.removeChild(nodeOld[0]).unlink() + + metanodeneu=dom.createElement(metaData) + metanodetext=dom.createTextNode(unicode(metadict[metaData],"utf8")) + metanodeneu.appendChild(metanodetext) + metanode.appendChild(metanodeneu) + + + return dom.topxml().encode('utf-8') + def readMetadata(url): - """Methoden zum Auslesen der Metadateninformation zu einer Resource + """Methode zum Auslesen der Metadateninformation zu einer Resource Vorerst noch Typ bib""" metadict={} @@ -105,11 +208,11 @@ def readMetadata(url): for node in metacontent: try: - metadict[node.tagName.lower()]=getText(node.childNodes) + metadict[re.sub('-','_',node.tagName.lower())]=getText(node.childNodes) except: """nothing""" - #print metadict + return metadict,"" @@ -195,11 +298,6 @@ class ECHO_layoutTemplate(ZopePageTempla meta_type="ECHO_layoutTemplate" - manage_options=ZopePageTemplate.manage_options+( - {'label':'Set back to Standard','action':'changeECHO_layoutTemplateToStandardForm'}, - ) - - def __init__(self, id, text=None, content_type=None,EchoType=None): self.id = str(id) @@ -212,12 +310,7 @@ class ECHO_layoutTemplate(ZopePageTempla text = open(self._default_content_fn).read() self.pt_edit(text, content_type) - def changeECHO_layoutTemplateToStandardForm(self): - """change form""" - pt=PageTemplateFile('Products/ECHO_content/zpt/changeECHO_pageTemplateWeightForm.zpt').__of__(self) - return pt() - - def changeECHO_pageTemplateWeight(self,templateKind): + """change form""" @@ -237,6 +330,7 @@ def manage_addECHO_layoutTemplate(self, EchoTypes=EchoType for singleType in EchoTypes: + id = str(singleType)+"_template" if REQUEST is None: self._setObject(id, ECHO_layoutTemplate(id, text,EchoType=singleType)) @@ -273,6 +367,15 @@ 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') @@ -314,34 +417,161 @@ class ECHO_resource(Folder): def getCoords(self): - try: - return [string.join(x,",") for x in self.coords] - except: - return [] + """gibt coordinaten als String zurück und löscht zugleich einträge die keine Koordinaten sind, letzteres zur korrektur der Eingabe der alten version""" + retList=[] + if hasattr(self,'coords'): + for x in self.coords: + if len(x)>1: + retList.append(string.join(x,",")) + return retList + + + def getContentType(self): + try: + return self.contentType + except: + return "" + + def getCopyrightType(self): + try: + return self.copyrightType + except: + return "" + + def getRenderingType(self): + try: + return self.renderingType + except: + return "" def ECHO_resource_config(self): """Main configuration""" if not hasattr(self,'weight'): self.weight="" - if not hasattr(self,'coords'): - self.coords=[] - print "vorher",self.coords pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resource.zpt').__of__(self) return pt() - def changeECHO_resource(self,metalink,link,title,label,description,contentType,responsible,weight,viewClassification="",coords=None,credits=None,RESPONSE=None): + def ECHO_resource_config_main(self): + """Main configuration""" + + if not hasattr(self,'weight'): + self.weight="" + + pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resource_main.zpt').__of__(self) + return pt() + + def ECHO_resource_config_coords(self): + """Coords configuration """ + + pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resource_coords.zpt').__of__(self) + return pt() + + def ECHO_resource_config_credits(self): + """Main configuration""" + + pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resource_credits.zpt').__of__(self) + return pt() + + def ECHO_resource_config_metadata(self): + """Main configuration""" + + if (hasattr(self,'metadata')) and not (hasattr(self,'metaDataHash')): + self.metaDataHash={} + self.contentType=self.bib_type + for data in self.metadata: + data_neu=re.sub('-','_',data) + self.metaDataHash[data_neu]=getattr(self,data) + #print data_neu, getattr(self,data) + #print self.metaDataHash,self.metadata + + pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resource_metadata.zpt').__of__(self) + return pt() + + + + + def changeECHO_resource_main(self,metalink,link,title,label,description,contentType,renderingType,weight,resourceID,RESPONSE=None): """Änderung der Properties""" + self.resourceID=resourceID + self.title=title + self.label=label + self.description=description + + self.contentType=contentType + self.renderingType=renderingType + self.weight=weight + + self.link=link + self.metalink=metalink + if RESPONSE is not None: + RESPONSE.redirect('manage_main') + + + def changeECHO_resource_coords(self,coords,viewClassification,RESPONSE=None): + """Änderung der Properties - coords""" + + if type(coords)==StringType: + coords=[coords] + + try: + coordsnew=[ string.split(x,",") for x in coords] + except: + coordsnew=[] + + self.coords=coordsnew[0:] + self.viewClassification=viewClassification - coordsnew=[ string.split(x,",") for x in coords] + if RESPONSE is not None: + RESPONSE.redirect('manage_main') + + def changeECHO_resource_credits(self,credits,responsible,copyrightType,RESPONSE=None): + """Änderung der Properties""" + self.credits=credits + self.responsible=responsible + self.copyrightType=copyrightType + if RESPONSE is not None: + RESPONSE.redirect('manage_main') + + + def changeECHO_resource_metadata(self,RESPONSE=None): + """change metadata""" + tags=self.findTagsFromMapping(self.contentType) + self.OSAS_meta={} + for field in tags[1]: + try: + self.metaDataHash[self.getFieldTag(tags,field)]=self.REQUEST.form[self.getFieldTag(tags,field)] + self.OSAS_meta[self.getFieldTag(tags,field)]=self.REQUEST.form['OSAS_%s'%self.getFieldTag(tags,field)] + except: + """nothing""" + + 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() + + if RESPONSE is not None: + RESPONSE.redirect('manage_main') + + + def newMetaXML(self): + """new index.meta""" + self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml') + return writeMetadata(self.metalink,self.OSAS_meta) + + + 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=[] setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordsnew) - + self.viewClassification=viewClassification self.coords=coordsnew[0:] self.link=link self.metalink=metalink @@ -351,10 +581,13 @@ class ECHO_resource(Folder): manage_options = Folder.manage_options+( - {'label':'Main Config','action':'ECHO_resource_config'}, - {'label':'Metadata','action':'ECHO_getResourceMD'}, - {'label':'Graphics','action':'ECHO_graphicEntry'}, - ) + {'label':'Main Config','action':'ECHO_resource_config_main'}, + {'label':'Change Credits & Copyright','action':'ECHO_resource_config_credits'}, + {'label':'Change Metadata','action':'ECHO_resource_config_metadata'}, + {'label':'Change Coords','action':'ECHO_resource_config_coords'}, + {'label':'Add coords','action':'ECHO_graphicEntry'}, + {'label':'Sync Metadata','action':'ECHO_getResourceMD'}, + ) def getOverview(self): """overview graphics""" @@ -382,6 +615,98 @@ class ECHO_resource(Folder): if RESPONSE is not None: RESPONSE.redirect('ECHO_graphicEntry') + + def isDefinedInThisSet(self,fields,field): + """checks if field is defined in fields""" + if (fields[0].has_key(field)) and not (fields[0][field]==""): + return 1 + else: + + return 0 + + def getFieldLabel(self,fields,field): + """get labels""" + try: + ret =fields[0][field] + if ret == "": + return field + else: + return ret + except: + return field + + + + def getFieldTag(self,fields,field): + """get labels""" + try: + ret =fields[0][field] + if ret == "": + return field + else: + return ret + except: + return field + + + + def getFieldValue(self,field): + """get value""" + #print field + try: + + ret=self.metaDataHash[field] + if ret == "": + return None + else: + return ret + except: + return None + + def findLabelsFromMapping(self,referenceType): + """gib hash mit label -> generic zurueck""" + self.referencetypes=self.ZopeFind(self.standardMD) + #print "RT",referenceType + + bibdata={} + retdata={} + fieldlist=self.standardMD.fieldList + + for referenceTypeF in self.referencetypes: + #print referenceTypeF[1].title,referenceType + if referenceTypeF[1].title == referenceType: + #print "OK" + bibdata[referenceTypeF[1].title]=referenceTypeF[1].fields + bibdata['data']=referenceTypeF[1] + self.fields=bibdata[referenceType] + for field in fieldlist: + retdata[field]=referenceTypeF[1].getValue(field)[1] + #print retdata,fieldlist + return retdata,fieldlist + + def findTagsFromMapping(self,referenceType): + """gib hash mit label -> generic zurueck""" + self.referencetypes=self.ZopeFind(self.standardMD) + + + bibdata={} + retdata={} + fieldlist=self.standardMD.fieldList + + for referenceTypeF in self.referencetypes: + + if referenceTypeF[1].title == referenceType: + bibdata[referenceTypeF[1].title]=referenceTypeF[1].fields + bibdata['data']=referenceTypeF[1] + self.fields=bibdata[referenceType] + for field in fieldlist: + retdata[field]=referenceTypeF[1].getValue(field)[0] + + return retdata,fieldlist + + + + def ECHO_getResourceMD(self,template="yes"): """Einlesen der Metadaten und Anlegen dieser Metadaten als Informationen zur Resource""" (metadict, error)=readMetadata(self.metalink) @@ -389,19 +714,26 @@ class ECHO_resource(Folder): if not error=="": #Fehler beim Auslesen des Metafiles - return "ERROR:",error - for key in metadict.keys():#Hinzufügen der Felder + return "ERROR:",error + - setattr(self,key,metadict[key].encode('ascii','replace')) - + if not (metadict['bib_type']==self.contentType): + self.REQUEST.SESSION['contentStorage']=metadict['bib_type'] + self.REQUEST.SESSION['contentZope']=self.contentType - self.metadata=metadict.keys() + return PageTemplateFile('Products/ECHO_content/zpt/ECHO_getResourceMDErrorContentType.zpt').__of__(self)() + + self.REQUEST.SESSION['metadict']=metadict - self.label=self.generate_label() - + self.REQUEST.SESSION['diffs']=checkDiffs(self,metadict) + + if template=="yes": pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_resourceMD.zpt').__of__(self) return pt() + + + def ECHO_getMD(self,item): """Ausgabe der MD""" @@ -441,6 +773,14 @@ class ECHO_externalLink(Folder): security=ClassSecurityInfo() meta_type='ECHO_externalLink' + 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') @@ -478,7 +818,10 @@ class ECHO_externalLink(Folder): 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,contentType,responsible,credits,weight,coords) @@ -521,12 +864,72 @@ def manage_addECHO_externalLink(self,id, RESPONSE.redirect('manage_main') +class ECHO_link(ECHO_externalLink): + """external_link""" + + meta_type="ECHO_link" + + + def content_html(self): + """template fuer content""" + return content_html(self,'link') + +def manage_addECHO_linkForm(self): + """Form for external Links""" + pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_linkForm.zpt').__of__(self) + return pt() + + +def manage_addECHO_link(self,id,title,label,description,contentType,responsible,link,weight,coords=None,credits=None,RESPONSE=None): + """Add an external Link""" + + newObj=ECHO_link(id,link,title,label,description,contentType,responsible,credits,weight,coords) + + self._setObject(id,newObj) + + if RESPONSE is not None: + RESPONSE.redirect('manage_main') + class ECHO_collection(Folder, Persistent, Implicit): """ECHO Collection""" security=ClassSecurityInfo() meta_type='ECHO_collection' + viewClassificationList=viewClassificationListMaster + displayTypes=displayTypes + def getViewClassification(self): + if hasattr(self,'viewClassification'): + return self.viewClassification + else: + return "" + + 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: @@ -541,7 +944,21 @@ class ECHO_collection(Folder, Persistent 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""" @@ -551,25 +968,77 @@ class ECHO_collection(Folder, Persistent for entry in object.__dict__.keys(): element=getattr(object,entry) try: - if element.meta_type=="ECHO_collection": - collections+="" + if element.meta_type in ["ECHO_collection","ECHO_group"]: + collections+="" collections+=getCollection(element,depth)+"\n" except: """nothing""" return collections - - return ""+getCollection(self)+"" + ret="""""" + return ret+""+getCollection(self)+"" def createJavaScript(self): """CreateJava""" ret=javaScriptMain - dynamical="" + dynamical="\n" for ob in self.getGraphicCoords(): - dynamical+="""Coords.push(new Coord('%s', Img, %s));\n"""%(ob[1],ob[0]) - ret+=javaHandler%dynamical + 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 + + def createJSAreas(self): + """new version of createJavaScript""" + dynamical="\n" + for ob in self.getGraphicCoords(): + if ob[5] == "area": + dynamical+="""addArea('%s', 'overview', %s, 'area');\n"""%(ob[1],ob[0]) + else: + dynamical+="""addArea('%s', 'overview', %s, 'arrow');\n"""%(ob[1],ob[0]) + return dynamical + + def createMapHead(self): + """generate divs""" + pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt/ECHO_content_map_frag_js')).__of__(self) + return pt() + + def createMapLink(self, ob, text=None): + """generate map link""" + id = ob[1] + link = ob[1] + if text == None: + text = ob[2] + tag = '" + return tag + + def createMapAux(self, ob, arrowsrc="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?dw=15&fn=icons/pfeil"): + """generate map link image, text and other stuff""" + id = ob[1] + link = ob[1] + vtype = ob[5] + ctype = ob[3].contentType + + tag = ''%(id,id,id,link) + if vtype == "view point": + rot = ob[4][4] + tag += ''%(id,arrowsrc,rot) + else: + tag += '3: - coord=coordtemp[0:4] - if hasattr(object,'label') and not object.label=="": - ids.append([string.join(coord,", "),object.getId(),object.label,object]) - elif hasattr(object,'title'): - if not object.title=="": - ids.append([string.join(coord,", "),object.getId(),object.title,object]) - else: - ids.append([string.join(coord,", "),object.getId(),object.getId(),object]) - else: - ids.append([string.join(coord,", "),object.getId(),object.getId(),object]) - - except: - """nothing""" - + for entrySearch in self.ZopeFind(self,obj_metatypes=subColTypes): + object=entrySearch[1] + if hasattr(object,'coords'): + for coordtemp in object.coords: + if len(coordtemp)>3: + coord=coordtemp[0:4] + label="" + vc="" + if hasattr(object,'label') and not object.label=="": + label=object.label + elif hasattr(object,'title') and not object.title=="": + label=object.title + else: + label=object.getId() + if object.viewClassification != "": + vc=object.viewClassification + else: + if len(coordtemp) > 4 and coordtemp[4] != "": + vc="view point" + else: + vc="area" + ids.append([string.join(coord,", "),object.getId(),label,object,coordtemp,vc]) 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 - - @@ -823,21 +1305,136 @@ def manage_addECHO_collectionForm(self): return pt() -def manage_addECHO_collection(self,id,title,label,description,contentType,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,contentType,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 index_html(self): + """standard page""" + displayedObjects=self.ZopeFind(self,obj_metatypes=displayTypes) + #if (len(displayedObjects)==1) and (displayedObjects[0][1].meta_type=="ECHO_collection"): # nur ein Object dann redirect auf dieses Object + # return self.REQUEST.RESPONSE.redirect(displayedObjects[0][1].absolute_url()) + + if 'index.html' in self.__dict__.keys(): + return getattr(self,'index.html')() + + elif 'overview' in self.__dict__.keys(): + return self.showOverview() + elif hasattr(self,'group_index_template'): + return self.group_index_template() + elif hasattr(self,'collection_index_template'): + return self.collection_index_template() + elif hasattr(self,'main_index_template'): + return self.main_index_template() + + pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_main_index_template_standard.zpt').__of__(self) + pt.content_type="text/html" + return pt() + + 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 getImageTag(self): + """needed by main_template""" + return "" + secondaryLink="" #needed by main_template + secondaryLinkTitle="" #needed by main_template + + def getBgcolour(self): + """hack""" + return "#dddddd" def contentTypeSelector_HTML(self,selected=None): """give type selector""" @@ -846,15 +1443,76 @@ class ECHO_root(Folder,Persistent,Implic else: retStr="%s
"""%(strUrl,word) str=retStr if str: @@ -932,12 +1623,12 @@ class ECHO_root(Folder,Persistent,Implic def link2html(self,str): """link2html fuer VLP muss hier noch raus""" if str: - print str + #print str str=re.sub("\&","&",str) dom=xml.dom.minidom.parseString(""+str+"") links=dom.getElementsByTagName("link") - print "link",links + #print "link",links for link in links: link.tagName="a" ref=link.getAttribute("ref") @@ -976,9 +1667,11 @@ class ECHO_root(Folder,Persistent,Implic def getPartnersXML(self): """partner liste als xml""" partners=self.getPartners() - ret="" - for partner in partners: - ret+="""\n"""%(partner.getId(),partner.title) + ret=""" + """ + + for partner in partners: + ret+="""\n"""%(partner.getId(),unicode(partner.title,'utf-8','replace')) return ret+"\n"