--- ECHO_content/ECHO_collection.py 2004/05/06 13:05:49 1.54 +++ ECHO_content/ECHO_collection.py 2004/05/18 22:30:09 1.87 @@ -19,14 +19,18 @@ from Globals import DTMLFile from OFS.Folder import Folder from OFS.SimpleItem import SimpleItem from AccessControl import ClassSecurityInfo +from AccessControl.User import UserFolder from Globals import InitializeClass from Globals import DTMLFile +import Globals from Products.PageTemplates.PageTemplateFile import PageTemplateFile from Products.PageTemplates.PageTemplate import PageTemplate from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate from Globals import Persistent, package_home from Acquisition import Implicit from ECHO_helpers import displayTypes + + try: from psycopg import libpq except: @@ -45,6 +49,29 @@ 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"]) @@ -76,8 +103,97 @@ 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 + +class BrowserCheck: + """check the browsers request to find out the browser type""" + + def __init__(self, zope): + self.ua = zope.REQUEST.get_header("HTTP_USER_AGENT") + self.isN4 = (string.find(self.ua, 'Mozilla/4.') > -1) and (string.find(self.ua, 'MSIE') < 0) + self.isIE = string.find(self.ua, 'MSIE') > -1 + self.nav = self.ua[string.find(self.ua, '('):] + ie = string.split(self.nav, "; ")[1] + if string.find(ie, "MSIE") > -1: + self.versIE = string.split(ie, " ")[1] + self.isMac = string.find(self.ua, 'Macintosh') > -1 + self.isWin = string.find(self.ua, 'Windows') > -1 + self.isIEWin = self.isIE and self.isWin + self.isIEMac = self.isIE and self.isMac + + +def writeMetadata(url,metadict): + """Einlesen der Metadaten und und erstellen des geaenderten 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={} @@ -112,11 +228,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,"" @@ -289,7 +405,22 @@ class ECHO_resource(Folder): return self.viewClassification else: return "" - + + def getFullTextXML(self,noredirect=None): + """getFullTextXML""" + try: + fh=urllib.urlopen(self.metalink) + dom=xml.dom.minidom.parse(fh) + texttools=dom.getElementsByTagName('texttool') + text=texttools[0].getElementsByTagName('text') + texturl=getText(text[0].childNodes) + if not noredirect: + self.REQUEST.RESPONSE.redirect(texturl) + else: + return texturl + except: + return None + def getCredits(self): """Ausgabe der credits""" if self.credits: @@ -321,10 +452,15 @@ 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: @@ -332,19 +468,135 @@ class ECHO_resource(Folder): 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 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 + + 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""" @@ -354,7 +606,7 @@ class ECHO_resource(Folder): 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 @@ -364,10 +616,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""" @@ -395,6 +650,108 @@ 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.lower() == referenceType.lower(): + #print "OK" + try: + bibdata[referenceTypeF[1].title]=referenceTypeF[1].fields + referenceType=referenceTypeF[1].title + except: + bibdata[referenceType]=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.lower() == referenceType.lower(): + try: + bibdata[referenceTypeF[1].title]=referenceTypeF[1].fields + referenceType=referenceTypeF[1].title + except: + bibdata[referenceType]=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) @@ -402,19 +759,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'].lower()==self.contentType.lower()): + self.REQUEST.SESSION['contentStorage']=metadict['bib_type'] + self.REQUEST.SESSION['contentZope']=self.contentType + + return PageTemplateFile('Products/ECHO_content/zpt/ECHO_getResourceMDErrorContentType.zpt').__of__(self)() + + self.REQUEST.SESSION['metadict']=metadict - self.metadata=metadict.keys() + self.REQUEST.SESSION['diffs']=checkDiffs(self,metadict) - self.label=self.generate_label() - + if template=="yes": pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_resourceMD.zpt').__of__(self) return pt() + + + def ECHO_getMD(self,item): """Ausgabe der MD""" @@ -552,8 +916,11 @@ class ECHO_link(ECHO_externalLink): def content_html(self): - """template fuer content""" - return content_html(self,'link') + """template fuer link""" + if hasattr(self,"link_template"): + return content_html(self,'link') + else: + return content_html(self,'collection') def manage_addECHO_linkForm(self): """Form for external Links""" @@ -574,8 +941,17 @@ def manage_addECHO_link(self,id,title,la 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""" @@ -585,10 +961,13 @@ class ECHO_collection(Folder, Persistent """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) @@ -642,28 +1021,114 @@ class ECHO_collection(Folder, Persistent element=getattr(object,entry) try: if element.meta_type in ["ECHO_collection","ECHO_group"]: - collections+="" + 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(): 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+="""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 + 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 createMapImg(self): + """generate img-tag for map""" + bt = BrowserCheck(self) + tag = "" + src = self.REQUEST['URL1'] + "/overview" + if bt.isN4: + tag += ''%src + else: + tag += ''%src + return tag + + def createMapLink(self, ob, text=None): + """generate map link""" + bt = BrowserCheck(self) + id = ob[1] + link = ob[1] + if text == None: + text = ob[2] + tag = "" + if bt.isN4: + tag += '" + else: + 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 + bt = BrowserCheck(self) + tag = "" + + if bt.isN4: + tag += ''%(id,id,id) + if vtype == "view point": + rot = ob[4][4] + tag += ''%(link,arrowsrc,rot) + else: + tag += ''%(id,id,id,link) + if vtype == "view point": + rot = ob[4][4] + if bt.isIEWin and bt.versIE > 5: + tag += ''%(id,arrowsrc,rot,arrowsrc,rot) + else: + tag += ''%(id,arrowsrc,rot) + else: + if bt.isIEWin: + tag += '
3: - coord=coordtemp[0:4] - if hasattr(object,'label') and not object.label=="": - 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,coordtemp]) - else: - ids.append([string.join(coord,", "),object.getId(),object.getId(),object,coordtemp]) - else: - ids.append([string.join(coord,", "),object.getId(),object.getId(),object,coordtemp]) - - 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 getSubCols = ECHO_helpers.getSubCols - - - + +Globals.InitializeClass(ECHO_collection) def manage_addECHO_collectionForm(self): """Add collection form""" @@ -929,6 +1412,7 @@ def manage_addECHO_collection(self,id,ti class ECHO_group(ECHO_collection): """ECHO Gruppe""" + security=ClassSecurityInfo() meta_type="ECHO_group" manage_options = Folder.manage_options+( @@ -936,22 +1420,25 @@ class ECHO_group(ECHO_collection): {'label':'Rerender Links','action':'ECHO_rerenderLinksMD'}, {'label':'Graphics','action':'ECHO_graphicEntry'}, ) - + + security.declareProtected('View','index_html') def index_html(self): """standard page""" displayedObjects=self.ZopeFind(self,obj_metatypes=displayTypes) - if len(displayedObjects)==1: # nur ein Object dann redirect auf dieses Object - return self.REQUEST.RESPONSE.redirect(displayedObjects[0][1].absolute_url()) + #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() + return self.showOverview() elif hasattr(self,'group_index_template'): - return 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.collection_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" @@ -1028,12 +1515,129 @@ def manage_addECHO_group(self,id,title,l if RESPONSE is not None: RESPONSE.redirect('manage_main') +Globals.InitializeClass(ECHO_group) + +class ECHO_userFolder(UserFolder): + """User folder for Intranet""" + _domain_auth_mode=1 # Identification via domain + meta_type="ECHO_userFolder" + def authenticate(self, name, password, request): + emergency = self._emergency_user + if name is None: + return None + if emergency and name==emergency.getUserName(): + user = emergency + else: + user = self.getUser(name) + if user is not None and user.authenticate(password, request): + return user + else: + return None + + def domainSpecMatch(self,spec, request): + host='' + addr='' + + # Fast exit for the match-all case + if len(spec) == 1 and spec[0] == '*': + return 1 + + if request.has_key('REMOTE_HOST'): + host=request['REMOTE_HOST'] + + if request.has_key('REMOTE_ADDR'): + addr=request['REMOTE_ADDR'] + + if request.has_key('HTTP_X_FORWARDED_FOR'): + addr=request['HTTP_X_FORWARDED_FOR'] + + + if not host and not addr: + return 0 + + if not host: + try: host=socket.gethostbyaddr(addr)[0] + except: pass + if not addr: + try: addr=socket.gethostbyname(host) + except: pass + + + _host=host.split('.') + _addr=addr.split('.') + _hlen=len(_host) + _alen=len(_addr) + + for ob in spec: + sz=len(ob) + _ob=ob.split('.') + _sz=len(_ob) + + mo = addr_match(ob) + if mo is not None: + if mo.end(0)==sz: + fail=0 + for i in range(_sz): + a=_addr[i] + o=_ob[i] + if (o != a) and (o != '*'): + fail=1 + break + if fail: + continue + return 1 + + mo = host_match(ob) + if mo is not None: + if mo.end(0)==sz: + if _hlen < _sz: + continue + elif _hlen > _sz: + _item=_host[-_sz:] + else: + _item=_host + fail=0 + for i in range(_sz): + h=_item[i] + o=_ob[i] + if (o != h) and (o != '*'): + fail=1 + break + if fail: + continue + return 1 + return 0 + +Globals.default__class_init__(ECHO_userFolder) + + + +def manage_addECHO_userFolder(self,dtself=None,REQUEST=None,**ignored): + """add a user folder """ + f=ECHO_userFolder() + self=self.this() + try: self._setObject('acl_users', f) + except: return MessageDialog( + title ='Item Exists', + message='This object already contains a User Folder', + action ='%s/manage_main' % REQUEST['URL1']) + self.__allow_groups__=f + if REQUEST is not None: + REQUEST['RESPONSE'].redirect(self.absolute_url()+'/manage_main') + +def manage_addECHO_userFolderForm(self): + """add a user folder form""" + return manage_addECHO_userFolder(self) + class ECHO_root(Folder,Persistent,Implicit): """ECHO Root Folder""" - meta_type="ECHO_root" + security=ClassSecurityInfo() + + meta_type="ECHO_root" + def getImageTag(self): """needed by main_template""" @@ -1052,15 +1656,76 @@ class ECHO_root(Folder,Persistent,Implic else: retStr="%s
"""%(strUrl,word) str=retStr if str: @@ -1138,12 +1836,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") @@ -1182,9 +1880,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" @@ -1214,7 +1914,79 @@ class ECHO_root(Folder,Persistent,Implic ret.append((collection[0].getId(),collection[1].getId(),collection[2])) return ret - + def getResourcesHTML(self,viewerType=None,filter=None): + """gebe all ressourcen aus""" + + def sortHTML(x,y): + return cmp(x[1].title,y[1].title) + + ret="""

Resources in ECHO

""" + + resources = self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1) + ret+="""

Found %i resources

"""%len(resources) + resources.sort(sortHTML) + for resource in resources: + echo_url=resource[1].absolute_url() + + if hasattr(resource[1],'title'): + title=resource[1].title + else: + title="None" + if filter: + if re.search(filter,title): + ret+="""\n

%s

"""%(echo_url,title) + else: + ret+="""\n

%s

"""%(echo_url,title) + + ret +="""\n""" + + #self.REQUEST.RESPONSE.setHeader("Content-Type", "text/html") + #self.REQUEST.RESPONSE.write(ret) + return ret + + def getResourcesXML(self,viewerType=None,filter=None): + """gebe all ressourcen aus""" + ret=""" + """ + for resource in self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1): + + echo_url=resource[1].absolute_url() + if hasattr(resource[1],'link'): + viewer_url=resource[1].link + else: + viewer_url="NO URL" + if filter: + if re.search(filter,viewer_url): + ret+="""\n"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(viewer_url,safe='/:?')) + else: + ret+="""\n"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(viewer_url,safe='/:?')) + ret +="""\n""" + + self.REQUEST.RESPONSE.setHeader("Content-Type", "text/xml") + self.REQUEST.RESPONSE.write(ret) + + def getFullTextsXML(self,viewerType=None,filter=None): + """gebe all ressourcen aus""" + ret=""" + """ + for resource in self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1): + + echo_url=resource[1].absolute_url() + if resource[1].getFullTextXML(noredirect="yes"): + if hasattr(resource[1],'link'): + viewer_url=echo_url+"/getFullTextXML" + else: + viewer_url="NO URL" + if filter: + if re.search(filter,viewer_url): + ret+="""\n"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(viewer_url,safe='/:?')) + else: + ret+="""\n"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(viewer_url,safe='/:?')) + ret +="""\n""" + print ret + + self.REQUEST.RESPONSE.setHeader("Content-Type", "text/xml") + self.REQUEST.RESPONSE.write(ret) def manage_addECHO_root(self,id,title,RESPONSE=None): """Add an ECHO_root"""