--- ECHO_content/ECHO_collection.py 2007/01/15 11:13:04 1.280 +++ ECHO_content/ECHO_collection.py 2007/07/19 11:02:28 1.289 @@ -42,6 +42,7 @@ from Products.ZCatalog.CatalogPathAwaren from Products.ZCTextIndex.ZCTextIndex import manage_addLexicon import urllib +import urllib2 import cgi import smtplib import time @@ -51,7 +52,7 @@ from Ft.Xml import EMPTY_NAMESPACE import Ft.Xml.XPath import cStringIO -import zLOG + import sys try: @@ -74,20 +75,24 @@ try: except: print "no echo_language" class ECHO_language: - """ leere Klasse""" - pass + """ leere Klasse""" + pass from ECHO_movie import * import vlp_xmlhelpers #TODO: vlp elemente aus echo herausnehmen import xmlrpclib - +import logging +#ersetzt logging.info +def logger(txt,method,txt2): + """logging""" + logging.info(txt+ txt2) def normalizeCt(str): - """normalizes content_type""" - #str= str.replace(" ","_") - return str.replace("-"," ").lower() + """normalizes content_type""" + #str= str.replace(" ","_") + return str.replace("-"," ").lower() def setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordstrs=""): @@ -359,7 +364,7 @@ class ECHO_fullText(ZopePageTemplate,ECH def getPage(self,nr='1'): """get page n""" #return self().encode('latin-1','ignore') - try: + try: dom=xml.dom.minidom.parseString(self()) except: dom=xml.dom.minidom.parseString(self().encode('latin-1')) @@ -619,7 +624,7 @@ class ECHO_resource(CatalogAware,Folder, try: urllib.urlopen(url) except: - zLOG.LOG("ECHO_Resource (getAccessRightMD)", zLOG.INFO,"%s (%s)"%sys.exc_info()[0:2]) + logger("ECHO_Resource (getAccessRightMD)", logging.INFO,"%s (%s)"%sys.exc_info()[0:2]) return None,getattr(self,'accessRight','') @@ -627,7 +632,7 @@ class ECHO_resource(CatalogAware,Folder, try: dom = NonvalidatingReader.parseUri(url) except: - zLOG.LOG("ECHO_Resource (getAccessRightMD)", zLOG.INFO,"%s (%s)"%sys.exc_info()[0:2]) + logger("ECHO_Resource (getAccessRightMD)", logging.INFO,"%s (%s)"%sys.exc_info()[0:2]) return (None,"Cannot parse: "+url+"
"+"%s (%s)"%sys.exc_info()[0:2]) @@ -763,7 +768,7 @@ class ECHO_resource(CatalogAware,Folder, if (not resourcepath) or (not digiliburlprefix) or (not images): - zLOG.LOG("ECHO (createImageUrl)",zLOG.ERROR,"Cannot create ImageUrl for %s"%self.absolute_url()) + logger("ECHO (createImageUrl)",logging.ERROR,"Cannot create ImageUrl for %s"%self.absolute_url()) return None resourcepath=resourcepath.replace('/mpiwg/online','') if not digiliburlprefix: digiliburlprefix="http://echo.mpiwg-berlin.mpg.de/zogilib?" @@ -896,8 +901,8 @@ class ECHO_resource(CatalogAware,Folder, break; except: - zLOG.LOG("ECHO_ressource (changeViewerTemplateSet)", zLOG.ERROR,"%s (%s)"%sys.exc_info()[0:2]) - zLOG.LOG("ECHO_ressource (changeViewerTemplateSet)", zLOG.ERROR,'http://echo.mpiwg-berlin.mpg.de/echo_nav/storage/downloadExternalXML?index_meta_url=%s&xml_url=%s'%(self.metalink,self.absolute_url()+'/newMetaXML'+urllib.quote('?'+params))) + logger("ECHO_ressource (changeViewerTemplateSet)", logging.ERROR,"%s (%s)"%sys.exc_info()[0:2]) + logger("ECHO_ressource (changeViewerTemplateSet)", logging.ERROR,'http://echo.mpiwg-berlin.mpg.de/echo_nav/storage/downloadExternalXML?index_meta_url=%s&xml_url=%s'%(self.metalink,self.absolute_url()+'/newMetaXML'+urllib.quote('?'+params))) #print self.absolute_url()+'/newMetaXML'+urllib.quote'?'+params) # hack Pfad auf die Dokumente path=self.metalink @@ -913,8 +918,8 @@ class ECHO_resource(CatalogAware,Folder, try: return ECHO_helpers.urlopen("http://nausikaa2.rz-berlin.mpg.de:86/cgi-bin/toc/admin/reg.cgi?path=%s"%path).readlines() except: - zLOG.LOG("ECHO_Resource (changeViewerTemplateSet)", zLOG.INFO,"%s (%s)"%sys.exc_info()[0:2]) - zLOG.LOG("ECHO_Resource (changeViewerTemplateSet)", zLOG.INFO,"http://nausikaa2.rz-berlin.mpg.de:86/cgi-bin/toc/admin/reg.cgi?path=%s"%path) + logger("ECHO_Resource (changeViewerTemplateSet)", logging.INFO,"%s (%s)"%sys.exc_info()[0:2]) + logger("ECHO_Resource (changeViewerTemplateSet)", logging.INFO,"http://nausikaa2.rz-berlin.mpg.de:86/cgi-bin/toc/admin/reg.cgi?path=%s"%path) if RESPONSE is not None: RESPONSE.redirect('manage_main') @@ -936,17 +941,17 @@ class ECHO_resource(CatalogAware,Folder, """getFullTextXML; gives the FullText as an XML Document, and if somthing goes wrong.""" try: - #zLOG.LOG("ECHO Fulltext",zLOG.INFO,"open %s"%self.metalink) + #logger("ECHO Fulltext",logging.INFO,"open %s"%self.metalink) fh=ECHO_helpers.urlopen(self.metalink) - #zLOG.LOG("ECHO Fulltext",zLOG.INFO,"opened %s"%self.metalink) + #logger("ECHO Fulltext",logging.INFO,"opened %s"%self.metalink) dom=xml.dom.minidom.parse(fh) texttools=dom.getElementsByTagName('texttool') text=texttools[0].getElementsByTagName('text') texturl=getText(text[0].childNodes) - #zLOG.LOG("ECHO Fulltext",zLOG.INFO,"found %s"%texturl) + #logger("ECHO Fulltext",logging.INFO,"found %s"%texturl) fh.close() - #zLOG.LOG("ECHO Fulltext",zLOG.INFO,"closed fh") + #logger("ECHO Fulltext",logging.INFO,"closed fh") #keine url if not (texturl.split(":")[0] in ['http','ftp','file']): if not noredirect: @@ -956,7 +961,7 @@ class ECHO_resource(CatalogAware,Folder, if not noredirect: self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml') - zLOG.LOG("ECHO Fulltext",zLOG.INFO,"redirect to:%s"%texturl) + logger("ECHO Fulltext",logging.INFO,"redirect to:%s"%texturl) self.REQUEST.RESPONSE.redirect(texturl) else: return texturl @@ -1172,8 +1177,26 @@ class ECHO_resource(CatalogAware,Folder, only if metalink is set, otherwise it gives false """ + texterUrl="http://nausikaa2.mpiwg-berlin.mpg.de/digitallibrary/servlet/Texter?fn=/" + vl,msg=self.checkValidityOfMetaLink() + if not vl: #ungueltiger link, versuche neuen + newStr=re.match(".*/mpiwg/online/(.*)",self.metalink) # suche pfad hinter /mpiwg/online + oldLink=self.metalink + + if newStr: + self.metalink=texterUrl+newStr.group(1) + vl,msg=self.checkValidityOfMetaLink() + else: + logging.error("change Viewer XX(mew Metadatafile) %s"%self.metalink) + vl=False + + if not vl: # geht immer noch nicht, dann setzte wieder zurueck + self.metaLink=oldLink + + logging.info("change Viewer (mew Metadatafile) %s"%self.metalink) + if vl: self.newViewer=newViewer return vl,msg @@ -1279,7 +1302,7 @@ class ECHO_resource(CatalogAware,Folder, 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: - zLOG.LOG("ECHO_collection (changeECHO_resource_metadata)",zLOG.ERROR,"%s (%s)"%sys.exc_info()[0:2]) + logger("ECHO_collection (changeECHO_resource_metadata)",logging.ERROR,"%s (%s)"%sys.exc_info()[0:2]) print self.newMetaXML() tries=0 @@ -1305,7 +1328,7 @@ class ECHO_resource(CatalogAware,Folder, self.getMDValue('year',generic="yes"),self.getTitle()]) except: - #zLOG.LOG(" ECHO_collection(getMDSimpleSearchField)",zLOG.INFO," ".join([self.getMDValue('title',generic="yes"), + #logger(" ECHO_collection(getMDSimpleSearchField)",logging.INFO," ".join([self.getMDValue('title',generic="yes"), # self.getMDValue('author',generic="yes"), # self.getMDValue('year',generic="yes"),''])) return "" @@ -1320,13 +1343,13 @@ class ECHO_resource(CatalogAware,Folder, ct=self.contentType.replace(" ","_").lower() ct=self.contentType.replace("-","_").lower() else: - zLOG.LOG("ECHO_collection (getMDValue)", zLOG.INFO, "no_content type for %s"%self.getId()) + logger("ECHO_collection (getMDValue)", logging.INFO, "no_content type for %s"%self.getId()) ct="" #caching if not hasattr(self,'_v_mapHash'): #noch keine cachevariable self._v_mapHash={} - + tmp=self._v_mapHash.get(ct,None) @@ -1348,14 +1371,14 @@ class ECHO_resource(CatalogAware,Folder, ret =self.metaDataHash.get(fieldName,'!!NOT USED HERE in Type: %s'%normalizeCt(self.contentType)) except: - zLOG.LOG("ECHO (line 1069)",zLOG.ERROR,"no md hash for %s"%self.getId()) + logger("ECHO (line 1069)",logging.ERROR,"no md hash for %s"%self.getId()) return "" else: ret= self.metaDataHash.get(fieldNameTest,empty) - + if type(ret) is StringType: return ret.decode('utf-8') else: @@ -1515,7 +1538,7 @@ class ECHO_resource(CatalogAware,Folder, tags=self.findTagsFromMapping(normalizeCt(self.contentType)) self.referencetypes=tags[2] for referenceTypeF in self.referencetypes: - + if normalizeCt(referenceTypeF[1].title) == normalizeCt(referenceType.lower()): @@ -1752,7 +1775,7 @@ class ECHO_externalLink(Folder,ECHO_basi - def __init__(self,id,link,title,label,description,contentType,responsible,credits,weight,coords): + def __init__(self,id,link,title,label,description,contentType,responsible,credits,weight,coords,linkType): self.id = id """Festlegen der ID""" @@ -1767,6 +1790,8 @@ class ECHO_externalLink(Folder,ECHO_basi self.responsible=responsible coordsnew=[ string.split(x,",") for x in coords] self.coords=coordsnew + self.linkType = linkType # Linktypen 'otherPresentation','external' + def ECHO_externalLink_config(self): """Main configuration""" @@ -1782,25 +1807,50 @@ class ECHO_externalLink(Folder,ECHO_basi return pt() - def changeECHO_externalLink(self,link,title,label,description,contentType,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,linkType='otherPresentation'): """Aenderung der Properties""" setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight) self.link=link + self.linkType = linkType if RESPONSE is not None: RESPONSE.redirect('manage_main') + def getLinkType(self): + """ return linkType """ + if hasattr(self,"linkType"): + return self.linkType + else : + return 'otherPresentation' + + def setLinkType(self,type): + """ set linkType """ + self.linkType = type + + def checkLink(self): + """ returns tuple (isWorking,Error) """ + try: + urllib2.urlopen(self.link) + return (True, '') + except urllib2.HTTPError, e: + return (False, e.code) + except urllib2.URLError, e: + return (False, str(e.reason)) + except: + return (False, 'unknown Error') + - manage_options = Folder.manage_options+( + manage_options = ( {'label':'Main Config','action':'ECHO_externalLink_config'}, {'label':'Graphic Coords','action':'ECHO_graphicEntry'}, - ) + )+Folder.manage_options def index_html(self): """standard page""" return self.REQUEST.RESPONSE.redirect(self.link) + def manage_addECHO_externalLinkForm(self): """Form for external Links""" @@ -1808,10 +1858,10 @@ def manage_addECHO_externalLinkForm(self return pt() -def manage_addECHO_externalLink(self,id,title,label,description,contentType,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,linkType='otherPresentation'): """Add an external Link""" - newObj=ECHO_externalLink(id,link,title,label,description,contentType,responsible,credits,weight,coords) + newObj=ECHO_externalLink(id,link,title,label,description,contentType,responsible,credits,weight,coords,linkType) self._setObject(id,newObj) @@ -1949,7 +1999,7 @@ class ECHO_link(ECHO_externalLink): params['backLink']=self.aq_parent.absolute_url() params['startLink']=splitted[0]+"?"+urllib.urlencode(params) - + return self.REQUEST.RESPONSE.redirect(splitted[0]+"?"+urllib.urlencode(params)) else: return "" @@ -2114,16 +2164,16 @@ class ECHO_collection(CatalogAware, Fold if obj.meta_type=="ECHO_mapText": if splitted[1]=="en": - obj.locale_en.pt_edit(REQUEST.form[key],None) + obj.locale_en.pt_edit(REQUEST.form[key],obj.locale_en.content_type) else: - obj.pt_edit(REQUEST.form[key],None) + obj.pt_edit(REQUEST.form[key],obj.content_type) else: text=obj.ZopeFind(obj,obj_metatypes=['ECHO_mapText']) if splitted[1]=="en": - text[0][1].locale_en.pt_edit(REQUEST.form[key],None) + text[0][1].locale_en.pt_edit(REQUEST.form[key],text[0][1].locale_en.content_type) else: - text[0][1].pt_edit(REQUEST.form[key],None) + text[0][1].pt_edit(REQUEST.form[key],text[0][1].content_type) if RESPONSE is not None: RESPONSE.redirect('manage_main') @@ -2419,7 +2469,7 @@ class ECHO_collection(CatalogAware, Fold if ret and RESPONSE: RESPONSE.write("ok: %s\n"%txt) - #zLOG.LOG("ECHO (copyTitleToInfoXMLFolder)",zLOG.INFO,txt) + #logger("ECHO (copyTitleToInfoXMLFolder)",logging.INFO,txt) if RESPONSE is not None: RESPONSE.write("done!\n") RESPONSE.close() @@ -2580,9 +2630,9 @@ class ECHO_collection(CatalogAware, Fold ret="""""" return ret+""+getCollection(self,pwstr=pwstr)+"" - def createAllJSAreas(self): + def createAllJSAreas(self,mapColTypes=None): """create area calls for JavaScript""" - areas = self.getAllMapAreas() + areas = self.getAllMapAreas(mapColTypes=mapColTypes) return self.createJSAreas(areas) @@ -2632,7 +2682,7 @@ class ECHO_collection(CatalogAware, Fold return ECHO_rerenderLinksMD(self,obj,types) - def __init__(self,id,title,label,description="",contentType="",responsible="",credits="",weight="",sortfield="",coords=[],secondaryLinkTitle="",secondaryLink="",imageTag="",bgcolour=""): + def __init__(self,id,title,label,description="",contentType="",responsible="",credits="",weight="",sortfield="",coords=[],secondaryLinkTitle="",secondaryLink="",imageTag="",bgcolour="",isVisible=True): self.id = id """Festlegen der ID""" @@ -2650,6 +2700,7 @@ class ECHO_collection(CatalogAware, Fold self.secondaryLinkTitle=secondaryLinkTitle self.secondaryLink=secondaryLink self.bgcolour=bgcolour + self.isVisible=isVisible manage_options = Folder.manage_options+ Cacheable.manage_options+( @@ -2694,7 +2745,7 @@ class ECHO_collection(CatalogAware, Fold security.declarePublic('changeECHO_collection') - def changeECHO_collection(self,title,label,description,contentType,responsible,weight,secondaryLink,secondaryLinkTitle,credits=None,sortfield="weight",coords=None,RESPONSE=None,imageTag="",bgcolour="",location=None,isAlwaysClickable=None,prefix="",suffix=""): + def changeECHO_collection(self,title,label,description,contentType,responsible,weight,secondaryLink,secondaryLinkTitle,credits=None,sortfield="weight",coords=None,RESPONSE=None,imageTag="",bgcolour="",location=None,isAlwaysClickable=None,prefix="",suffix="",isVisible=True): """Aenderung der Properties""" self.secondaryLink=secondaryLink @@ -2705,6 +2756,7 @@ class ECHO_collection(CatalogAware, Fold self.isAlwaysClickable=isAlwaysClickable self.prefix=prefix[0:] self.suffix=suffix[0:] + self.setIsVisible(isVisible) setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight) @@ -2805,9 +2857,11 @@ class ECHO_collection(CatalogAware, Fold """javascript""" return sendFile(self, 'js/hl_add.js', 'text/plain') - def getAllMapAreas(self,mapColTypes=['ECHO_collection','ECHO_resource','ECHO_link','ECHO_externalLink']): + def getAllMapAreas(self,mapColTypes=None): """Give list of coordinates""" - + if mapColTypes is None: + mapColTypes=['ECHO_collection','ECHO_resource','ECHO_link','ECHO_externalLink'] + areas=[] for entry in self.getSubCols(subColTypes=mapColTypes): object=entry @@ -2842,11 +2896,11 @@ def manage_addECHO_collectionForm(self): return pt() -def manage_addECHO_collection(self,id,title,label,description="",contentType="",responsible="",weight=0,sortfield="weight",coords="",secondaryLinkTitle="",secondaryLink="",credits=None,RESPONSE=None,imageTag="",bgcolour=""): +def manage_addECHO_collection(self,id,title,label,description="",contentType="",responsible="",weight=0,sortfield="weight",coords="",secondaryLinkTitle="",secondaryLink="",credits=None,RESPONSE=None,imageTag="",bgcolour="",isVisible=True): """add a echo collection""" - newObj=ECHO_collection(id,title,label,description,contentType,responsible,credits,weight,sortfield,coords,secondaryLinkTitle=secondaryLinkTitle,secondaryLink=secondaryLink,imageTag=imageTag,bgcolour="") + newObj=ECHO_collection(id,title,label,description,contentType,responsible,credits,weight,sortfield,coords,secondaryLinkTitle=secondaryLinkTitle,secondaryLink=secondaryLink,imageTag=imageTag,bgcolour="",isVisible=isVisible) self._setObject(id,newObj)