--- ECHO_content/ECHO_collection.py 2012/08/23 10:25:32 1.310.2.7 +++ ECHO_content/ECHO_collection.py 2012/08/29 07:53:31 1.310.2.8 @@ -86,6 +86,8 @@ import xmlrpclib import logging +from ECHO_root import ECHO_root + #ersetzt logging.info def logger(txt,method,txt2): """logging""" @@ -1086,39 +1088,18 @@ class ECHO_collection(CatalogAware, Fold if RESPONSE is not None: RESPONSE.redirect('manage_main') - def changeViewerTemplateSetsForm(self): + + def changeViewerForm(self): """change the viewer template set""" - pt=zptFile(self, 'zpt/changeViewerTemplateSet') + pt=zptFile(self, 'zpt/changeECHOViewer') return pt() - - def getViewerTemplateSets(self,obj_ids=None,RESPONSE=None): - """Get the ViewerTemplateSet title for configuration""" - ret=[] - - try: - viewerTemplateSets=self.ZopeFind(self.viewerTemplateSets,obj_metatypes=['OSAS_viewerTemplateSet'],obj_ids=obj_ids)#assumes viewerTemplateSets folder somewhere in the hierarchie. - - for viewerTemplateSet in viewerTemplateSets: - ret.append((viewerTemplateSet[1].title,viewerTemplateSet[0],viewerTemplateSet[1])) - - return ret - - except: - return [('no ViewerTemplateSetfolders','')] - + def getTextToolsField(self,name,default=''): - """Lese viewerTemplateSet der Collection not implemented yet!""" + """Lese text tool field der Collection not implemented yet!""" return default - def isSelectedViewerTemplateSet(self,obj,id): - """is ausgewaehlt""" - - if self.REQUEST['viewerTemplateSet']==id: - return 1 - else: - return None def changeViewer(self,newViewer,REQUEST=None,RESPONSE=None): """changes all ressources to the newViewer""" @@ -1410,7 +1391,7 @@ class ECHO_collection(CatalogAware, Fold {'label':'Export/Import Objects','action':'exportImportObjects_html'}, {'label':'Graphic Coords','action':'ECHO_graphicEntry'}, {'label':'create resources from XML','action':'createRessourcesFromXMLForm'}, - {'label':'Change Viewer Templates and Image Viewer','action':'changeViewerTemplateSetsForm'}, + {'label':'Change Image Viewer','action':'changeViewerForm'}, {'label':'ImportCollection','action':'importCollection'}, {'label':'Change access rights', 'action':'changeAccessRightsCollectionForm'}, ) @@ -1893,875 +1874,6 @@ def createNode(self,descrs,node): return "XX" -class ECHO_root(Folder,Persistent,Implicit): - """ECHO Root Folder""" - - security=ClassSecurityInfo() - - meta_type="ECHO_root" - management_page_charset="utf-8" - - getSubCols = ECHO_helpers.getSubCols - - manage_options=Folder.manage_options+( - {'label':'Main Config','action':'ECHO_copyright_configForm'}, - {'label':'Change Weights','action':'changeWeights'}, - {'label':'Generate from RDF','action':'generateFromRDFForm'}, - {'label':'update Resource Catalog','action':'updateResourceCatalog'}, - ) - - - - - def getECHORootURL(self): - return self.absolute_url() - - def getECHORoot(self): - return self - - def getBrowserType(self): - """returns browserType object""" - return browserType(self) - - def mod_re_sub(self,pattern,replace,string): - """re.sub aus mod re zur Verfuegung stellen""" - return re.sub(pattern,replace,string) - - def findObjectFromFulltext(self,existUri): - ''' - - @param url: - @param existUri: - ''' - - if existUri: - #TODO: at the moment assume that the filename is unique, the whole has to changed to a system of ids. - filename=existUri.split("/")[-1] - - founds=self.resourceCatalog.search({'fullTextUrl':os.path.splitext(filename)[0]}) - - ret=[(found.title,found.getObject().absolute_url(),found.getObject().aq_parent.absolute_url()) for found in founds] - - return ret - - def reindex(self,RESPONSE=None): - """indiziere alle Objecte neu""" - - if RESPONSE: - RESPONSE.write("") - - resources=self.ZopeFind(self,obj_metatypes=["ECHO_resource"], search_sub=1) - - for resource in resources: - resource[1].reindex() - #print "

done %s

\n" - if RESPONSE: - RESPONSE.write("

done %s

\n"%resource[0]) - - if RESPONSE: - RESPONSE.write("

ok

\n") - - - def setLanguage(self,lang): - """Set language cookie""" - self.REQUEST.RESPONSE.setCookie('lang_exhibition',lang,path="/") - - def switchLanguage(self): - """Set language cookie""" - if self.getLanguage()=="en": - lang="de" - else: - lang="en" - - self.REQUEST.RESPONSE.setCookie('lang_exhibition',lang,path="/") - self.REQUEST.RESPONSE.redirect(self.REQUEST['URL1']) - - def getLanguage(self): - """get language cookie""" - lang= self.REQUEST.cookies.get('lang_exhibition','de') - if lang == '': - lang="de" - return lang - - def getContentOverviewTemplate(self): - """produces overview template with macro""" - pt = zptObjectOrFile(self, 'content_overview_template') - return pt - - def mapstyle_css(self): - """send mapstyle.css""" - sendFile(self, 'html/ECHO_mapstyle.css', 'text/css') - - - ###Cdli adds -> have to be removed - def getTablet(self,item): - #print "getTablet" - try: - read=urllib.urlopen("http://enlil.museum.upenn.edu/cgi-bin/cdlget.plx?item=%s&project=ncdl"%item).read() - read=re.sub("\[search\]","search",read) - return read[read.find("")+6:read.rfind("")] - except: - return "

Sorry no connection to the data server enlil.museum.upenn.edu

" - #return "http://enlil.museum.upenn.edu/cgi-bin/cdlget.plx?item=%s&project=ncdl" - ###END CDLI add - - - def URLquote(self, text): - """urllib.quote fuer Michael""" - return urllib.quote(text) - - - def checkResource(self,id): - """checks if a resource is in the tree, gives back none or list of resources""" - if not id: - id="" - splitted=id.split("/") - id=splitted[len(splitted)-1] - if hasattr(self,"_v_checkResource") and self._v_checkResource.has_key(id): #existiert ein cache und id ist bereits drin? - return self._v_checkResource[id] - - else: - resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'],obj_ids=[id],search_sub=1) - - if not hasattr(self,"_v_checkResource"): self._v_checkResource={}#lege cache an falls nicht existent - if resources: - self._v_checkResource[id]=resources[0:] # slicing to be sure that data is stabil - else: - self._v_checkResource[id]=None - - return self._v_checkResource[id] - - def sendForm(self,fromaddr,content,server='mail.mpiwg-berlin.mpg.de'): - """sendform""" - toaddrs=["dwinter@mpiwg-berlin.mpg.de"] - - msg = ("From: %s\r\nTo: %s\r\nSubject: %s\r\n\r\n" - % (fromaddr, ", ".join(toaddrs),"testsub")) - server = smtplib.SMTP(server) - #server.set_debuglevel(1) - msg=msg+content - server.sendmail(fromaddr, toaddrs, msg) - server.quit() - - def generateFromRDFForm(self): - """change form""" - pt=zptFile(self, 'zpt/generateFromRDFForm') - pt.content_type="text/html" - return pt() - - def generateFromRDF(self,file,startNode="/Cuneiform Corpus"): - - """generate from RDF""" - - global seqs - seqs={} - global descrs - descrs={} - global key - key="" - global value - value="" - - def getEdges(seqs,urn): - """edges""" - ret=[] - return seqs[urn] - - def createSubs(self,seqs,descrs,urn,level=0): - """create subs""" - for edge in getEdges(seqs,urn): - cn=createNode(self,descrs,edge) - if cn[0]=="CDLI_group": - createSubs(cn[1],seqs,descrs,cn[2],level+1) - return - - def start_element(name,attrs): - - global seqs - global descrs - global key - global value - seq="" - if name=="rdf:Seq": - key=attrs.get('rdf:about') - try: # teste ob liste - x=seqs[key][0] - except: - - seqs[key]=[] - - - elif name=="rdf:Description": - key=attrs.get('rdf:about') - - - elif name=="rdf:li": - name=attrs.get('rdf:resource') - seqs[key].append(name) - - elif name=="echonavigation:type": - value="type" - - elif name=="echonavigation:name": - value="name" - elif name=="echonavigation:linkClickable": - value="linkClickable" - - def end_element(name): - """nothing""" - key="" - value="" - - def char_data(data): - """nothing""" - - data=re.sub("\n","",data) - try: - if descrs[key].has_key(value): - descrs[key][value]+=data - else: - descrs[key][value]=data - except: - - descrs[key]={} - descrs[key][value]=data - - p = xml.parsers.expat.ParserCreate() - - p.StartElementHandler = start_element - p.EndElementHandler = end_element - p.CharacterDataHandler = char_data - - - p.ParseFile(file) - self.REQUEST.RESPONSE.write("

Start

") - createSubs(self,seqs,descrs,startNode) - self.REQUEST.RESPONSE.write("

done

") - #print "done" - - - return "done" - - - - - def changeWeightsInCollection(self): - """change all lables of a collection""" - ret="" - argv=self.REQUEST.form - - resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource','ECHO_collection','ECHO_link','ECHO_externalLink']) - for resource in resources: - - try: - ret+=resource[1].getId()+" "+argv[resource[1].getId()]+"
" - resource[1].weight=argv[resource[1].getId()][0:] - except: - pass - return ret - - def changeWeights(self): - """change form""" - pt=zptFile(self, 'zpt/changeWeightForm') - pt.content_type="text/html" - return pt() - - - def getRDF(self,urn=None): - """rdf of the collection""" - - contents=self.ZopeFind(self,obj_metatypes=['ECHO_group','ECHO_resource','ECHO_collection']) - - ret=getRDFDescription(self,self.absolute_url(),urn=urn) - - li="""\n""" - - - for content in contents: - ret+=content[1].getRDF()+"\n" - - ret+="""\n"""%urn - for content in contents: - nurn=content[1].absolute_url() - ret+=li%nurn - return ret+"" - - - def showContent(self,path): - """return content/html""" - - return ECHO_helpers.urlopen(path+"/content_html").read() - - def getImageViewers(self): - """images""" - viewers=self.ZopeFind(self.standardImageViewer,obj_metatypes=['OSAS_ViewerObject']) - return viewers - - - def getBibTag(self,tag,content): - """get field tag for index-meta-generation""" - if not content or content=="": - return "" - ret="<%s>"%tag - #ret+=urllib.quote(content) - ret+=content - - ret+=""%tag - return ret - - def getValueFromClass(self,field,found): - """ret attribute if existing""" - try: - - - return getattr(found,field)#.decode('ascii','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') - def getImageTag(self): - """needed by main_template""" - return "" - - secondaryLink="" #needed by main_template - secondaryLinkTitle="" #needed by main_template - - def getBgcolour(self): - """hack""" - return "#dddddd" - - security.declareProtected('View','contentTypeSelector_HTML') - def contentTypeSelector_HTML(self,selected=None): - """give type selector""" - if not selected: - retStr="