--- ECHO_content/ECHO_collection.py 2007/02/20 15:55:21 1.285 +++ ECHO_content/ECHO_collection.py 2008/11/19 14:22:42 1.297 @@ -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 @@ -74,8 +75,8 @@ 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 @@ -89,9 +90,9 @@ def logger(txt,method,txt2): 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=""): @@ -195,12 +196,15 @@ class ECHO_locale(ZopePageTemplate): meta_type="ECHO_locale" def __init__(self,id,lang,title,label,text=None,content_type=None): - self.lang=lang - self.title=title - self.label=label - if text: - self.pt_edit(text, content_type) - self.id=id + self.lang=lang + self.title=title + self.label=label + # default content + if not text: + text = open(self._default_content_fn).read() + content_type = 'text/html' + self.pt_edit(text, content_type) + self.id=id manage_options = ZopePageTemplate.manage_options+( {'label':'Main Config','action':'change_ECHO_localeForm'}, @@ -217,6 +221,8 @@ class ECHO_locale(ZopePageTemplate): self.title=title self.label=label if not text is None: + if content_type is None: + content_type = self.content_type self.pt_edit(text, content_type) if RESPONSE is not None: @@ -306,6 +312,8 @@ class ECHO_layoutTemplate(ZopePageTempla 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() + if content_type is None: + content_type = self.content_type self.pt_edit(text, content_type) @@ -363,7 +371,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')) @@ -421,6 +429,22 @@ class ECHO_resource(CatalogAware,Folder, getSubCols = ECHO_helpers.getSubCols + def index_meta(self,RESPONSE=None): + """ gibt das im metalink gespeicher xml-file zurueck""" + url = self.metalink + txt="" + logging.debug("ml:%s"%url) + try: + page = urllib.urlopen(url); + if RESPONSE: + RESPONSE.setHeader("Content-Type","text/xml") + + txt = page.read(); + except: + logging.error("Cannot read metadata of: %s"%self.getId()) + + return txt + def reindex(self): """generate fields for indexing and reindex""" @@ -1176,8 +1200,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 @@ -1330,7 +1372,7 @@ class ECHO_resource(CatalogAware,Folder, #caching if not hasattr(self,'_v_mapHash'): #noch keine cachevariable self._v_mapHash={} - + tmp=self._v_mapHash.get(ct,None) @@ -1360,10 +1402,7 @@ class ECHO_resource(CatalogAware,Folder, ret= self.metaDataHash.get(fieldNameTest,empty) - if type(ret) is StringType: - return ret.decode('utf-8') - else: - return ret + return unicodify(ret) getFieldValue=getMDValue #depricated @@ -1424,6 +1463,10 @@ class ECHO_resource(CatalogAware,Folder, self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml') return writeMetadata(self.metalink,self.metaDataHash) + def getMetaDataLink(self): + """get link to the meta data""" + return self.metalink + def changeECHO_resource(self,metalink,link,title,label,description,contentType,responsible,weight,coords=None,credits=None,RESPONSE=None): """Aenderung der Properties""" @@ -1519,7 +1562,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()): @@ -1771,8 +1814,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' - + self.linkType = linkType # Linktypen 'otherPresentation','external' + def ECHO_externalLink_config(self): """Main configuration""" @@ -1793,20 +1836,32 @@ class ECHO_externalLink(Folder,ECHO_basi setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight) self.link=link - self.linkType = linkType + 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' + 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 = ( @@ -1819,7 +1874,7 @@ class ECHO_externalLink(Folder,ECHO_basi """standard page""" return self.REQUEST.RESPONSE.redirect(self.link) - + def manage_addECHO_externalLinkForm(self): """Form for external Links""" @@ -1968,7 +2023,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 "" @@ -1979,10 +2034,10 @@ def manage_addECHO_linkForm(self): return pt() -def manage_addECHO_link(self,id,title,label,description="",contentType="",responsible="",link="",weight="",coords=[],credits=None,RESPONSE=None): +def manage_addECHO_link(self,id,title,label,description="",contentType="",responsible="",link="",weight="",coords=[],credits=None,linkType="external",RESPONSE=None): """Add an external Link""" - newObj=ECHO_link(id,link,title,label,description,contentType,responsible,credits,weight,coords) + newObj=ECHO_link(id,link,title,label,description,contentType,responsible,credits,weight,coords,linkType) self._setObject(id,newObj) @@ -2133,16 +2188,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') @@ -2556,8 +2611,24 @@ class ECHO_collection(CatalogAware, Fold manage_addECHO_resource(self,id,title,label,description,responsible,link,metalink,weight,credits=None,coords=None,RESPONSE=None) return "done" except: - return None + logging.error("ECHOcollection: (AddResource): %s %s"%sys.exc_info()[0:2]) + return None + def addResourceAndCreateLabelAndTitle(self,id,title,label,description,contentType,responsible,link,metalink,weight,credits=None,coords=None,RESPONSE=None): + """SSS""" + ret = self.addResource(id,title,label,description,contentType,responsible,link,metalink,weight,credits,coords,RESPONSE) + if ret is None: + return None + + try: + server2=getattr(self,id) + server2.copyIndex_meta2echo_resource() + server2.generate_label() + server2.generate_title() + except: + logging.error("An Error occured adding the resource A\n %s %s"%sys.exc_info()[0:2]) + return None + return "done" def getSecondaryLink(self): """secondary link""" try: @@ -2599,9 +2670,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) @@ -2669,7 +2740,7 @@ class ECHO_collection(CatalogAware, Fold self.secondaryLinkTitle=secondaryLinkTitle self.secondaryLink=secondaryLink self.bgcolour=bgcolour - self.isVisible=isVisible + self.isVisible=isVisible manage_options = Folder.manage_options+ Cacheable.manage_options+( @@ -2725,7 +2796,7 @@ class ECHO_collection(CatalogAware, Fold self.isAlwaysClickable=isAlwaysClickable self.prefix=prefix[0:] self.suffix=suffix[0:] - self.setIsVisible(isVisible) + self.setIsVisible(isVisible) setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight) @@ -2826,9 +2897,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 @@ -3478,8 +3551,10 @@ class ECHO_root(Folder,Persistent,Implic """ret attribute if existing""" try: - return getattr(found,field).decode('ascii','ignore') + return getattr(found,field)#.decode('utf-8','ignore') except: + logging.error("can't: decode: %s"%repr(field)) + logging.error(" %s %s"%(sys.exc_info()[0],sys.exc_info()[1])) return "" security.declarePublic('getImageTag') @@ -3716,7 +3791,10 @@ class ECHO_root(Folder,Persistent,Implic def formatAscii(self,str,url=None): """ersetze ascii umbrueche durch
""" - #url=None + + if not str: + return "" + if url: retStr="" @@ -3728,9 +3806,10 @@ class ECHO_root(Folder,Persistent,Implic retStr+="""%s
"""%(strUrl,word) str=retStr if str: - return re.sub(r"[\n]","
",str) + str = re.sub(r"[\n]","
",str) + return unicodify(str) else: - return "" + return u"" link2html=vlp_xmlhelpers.link2html related2html=vlp_xmlhelpers.related2html @@ -3867,6 +3946,20 @@ class ECHO_root(Folder,Persistent,Implic self.REQUEST.RESPONSE.setHeader("Content-Type", "text/xml") self.REQUEST.RESPONSE.write(ret) + def getCollectionsXML(self,viewerType=None,filter=None): + """gebe collections aus""" + ret=""" + """ + for resource in self.ZopeFind(self,obj_metatypes=['ECHO_collection','ECHO_group'],search_sub=1): + + echo_url=resource[1].absolute_url() + + ret+="""\n"""%urllib.quote(echo_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=""" @@ -4101,6 +4194,8 @@ class ECHO_linkList(ZopePageTemplate,ECH self.ZBindings_edit(self._default_bindings) if text is None: text = '' + if content_type is None: + content_type = self.content_type self.pt_edit(text, contentType)