--- ECHO_content/ECHO_collection.py 2013/08/05 08:20:10 1.310.2.12 +++ ECHO_content/ECHO_collection.py 2012/01/04 13:23:00 1.314 @@ -9,7 +9,11 @@ class ECHO_externalLink contains informa """ - +try: + from reportlab.pdfgen import canvas + from reportlab.lib.pagesizes import A4 +except: + print "PDF generation will not work" import urlparse import string @@ -17,6 +21,7 @@ import tempfile import zipfile import re import os,shutil +import traceback import OFS.Image from types import * from OFS.Cache import Cacheable @@ -36,8 +41,6 @@ from Globals import Persistent, package_ from Acquisition import Implicit from Products.ZCatalog.CatalogPathAwareness import CatalogAware from Products.ZCTextIndex.ZCTextIndex import manage_addLexicon -import ECHO_helpers -from Acquisition import aq_parent try: from Products.MetaDataProvider.MetaDataClient import MetaDataClient except: @@ -47,11 +50,11 @@ import urllib2 import cgi import smtplib import time -#from Ft.Xml.Domlette import NonvalidatingReader -#from Ft.Xml.Domlette import PrettyPrint, Print -#from Ft.Xml import EMPTY_NAMESPACE -# -#import Ft.Xml.XPath +from Ft.Xml.Domlette import NonvalidatingReader +from Ft.Xml.Domlette import PrettyPrint, Print +from Ft.Xml import EMPTY_NAMESPACE + +import Ft.Xml.XPath import cStringIO import sys @@ -81,13 +84,11 @@ except: pass from ECHO_movie import * -#import vlp_xmlhelpers #TODO: vlp elemente aus echo herausnehmen +import vlp_xmlhelpers #TODO: vlp elemente aus echo herausnehmen import xmlrpclib import logging -from ECHO_root import ECHO_root - #ersetzt logging.info def logger(txt,method,txt2): """logging""" @@ -544,10 +545,6 @@ class ECHO_link(ECHO_externalLink): {'label':'add links config','action':'ECHO_link_addLinksForm'}, ) - def getMDValueSimpleSearchField(self): - """returns value for simple search""" - return " ".join([self.getTitle(),self.getDescription()]) - def ECHO_link_addLinksForm(self): """Main configuration""" @@ -701,8 +698,6 @@ class ECHO_collection(CatalogAware, Fold meta_type='ECHO_collection' default_catalog='resourceCatalog' - rootMetaTypes = ['ECHO_root', 'ECHO_main', 'ECHO_nav'] - # viewClassificationList=viewClassificationListMaster displayTypes=displayTypes @@ -715,11 +710,12 @@ class ECHO_collection(CatalogAware, Fold return crumbs[0][2].getId() p = self + sec = None # descend parents to the root (and remember the last id) - while p is not None and p.meta_type not in self.rootMetaTypes: + while p is not None and p.meta_type != 'ECHO_root' and p.meta_type!='ECHO_main' and p.meta_type!='ECHO_nav': sec = p.getId() - p = aq_parent(p.context) + p = p.aq_parent return sec @@ -733,21 +729,12 @@ class ECHO_collection(CatalogAware, Fold sec = None subsec = None # descend parents to the root (and remember the last id) - while p is not None and p.meta_type not in self.rootMetaTypes: + while p is not None and p.meta_type != 'ECHO_root' and p.meta_type!='ECHO_main' and p.meta_type!='ECHO_nav': subsec = sec sec = p.getId() - p = aq_parent(p.context) + p = p.aq_parent return subsec - - - def getCrumb(self): - """returns breadcrumb for this object""" - return ECHO_helpers.getCrumb(self) - - def getHierCrumbs(self): - """returns a list of hierarchical breadcrumbs from self to the ECHO_root""" - return ECHO_helpers.getHierCrumbs(self) def exportImportObjects_html(self,RESPONSE): @@ -924,46 +911,6 @@ class ECHO_collection(CatalogAware, Fold return ret+"" - def getExportCollectionsAsJSON(self,metatypes=['ECHO_resource'],REQUEST=None): - import json - ret = self.getExport(metatypes=metatypes) - - if REQUEST: - REQUEST.response.setHeader("Content-type", "text/json; charset=utf-8") - - return json.dumps(ret) - - def getExport(self,metatypes=['ECHO_resource'],REQUEST=None): - - """JSON export collection content""" - import json - ret={} - #contents=self.ZopeFind(self,obj_metatypes=['ECHO_group','ECHO_resource','ECHO_collection']) - contents=self.ZopeFind(self,obj_metatypes=metatypes) - - ret['description']=self.getDescription(); - ret['title']=self.getTitle(); - ret['label']=self.getLabel(); - ret['content']=[] - ret['echo_path']=self.absolute_url().replace(self.echo_pages.absolute_url(),'') - - - for content in contents: - - ret['content'].append(content[1].getDRI(type="mpiwg")) - - return ret - - - - def getDRI(self,type="escidoc"): - """sofar cho collections don't have dris - therefore return the path""" - - return self.absolute_url().replace(self.echo_pages.absolute_url(),'') - - - def changeLabels(self): """change form""" @@ -971,6 +918,12 @@ class ECHO_collection(CatalogAware, Fold pt.content_type="text/html" return pt() + def changeMetaLinks(self): + """change form""" + pt=zptFile(self, 'zpt/changeMetaLinkForm') + pt.content_type="text/html" + return pt() + def changeTitles(self): """change form""" pt=zptFile(self, 'zpt/changeTitleForm') @@ -1026,6 +979,7 @@ class ECHO_collection(CatalogAware, Fold try: ret+=resource[1].getId()+" "+argv[resource[1].getId()]+"
" + logging resource[1].metalink=argv[resource[1].getId()][0:] except: pass @@ -1090,19 +1044,53 @@ class ECHO_collection(CatalogAware, Fold except: pass return ret + + def changeMetaLinksInCollection(self): + """change all lables of a collection""" + ret="" + argv=self.REQUEST.form + + resources=self.ZopeFind(self,obj_metatypes=['ECHO_pageTemplate','ECHO_movie','ECHO_resource','ECHO_collection','ECHO_link','ECHO_externalLink']) + for resource in resources: + + try: + ret+=resource[1].getId()+" "+argv[resource[1].getId()]+"
" + resource[1].metalink=argv[resource[1].getId()][0:] + except: + pass + return ret - def importCollection(self,path=None,viewerUrl=None,metaDataUrl=None,replacePathPermanent=None,replacePathExperimental=None,RESPONSE=None): + def importCollection(self,path=None,viewerUrl=None,metaDataUrl=None,replacePathPermanent=None,replacePathExperimental=None,folderListFile=None,RESPONSE=None): """liest verzeichnisse aus dem pfad und legt sie dann als objekte in den ordner""" - if path is None: + if (path is None) & (folderListFile is None): pt=zptFile(self, 'zpt/importCollection.zpt') return pt() - files=os.listdir(path) + + + if (path !=""): + files=os.listdir(path) + pathToFolder=path; + else: + pathToFolder=""; + files=[]; + for fileLine in folderListFile.readlines(): + for fileLine2 in fileLine.split("\r"): + logging.debug("append:"+fileLine2) + files.append(fileLine2) + ret="" for fileName in files: if fileName: + logging.debug("split:"+fileName); + if(pathToFolder==""): # pfad ist leer, da filename aud folderlistfile dann: + splitted=fileName.split("/"); + path="/".join(splitted[0:-1]); + fileName=splitted[-1].rstrip().lstrip(); + + if (replacePathExperimental and replacePathExperimental!=''): path=re.sub(replacePathExperimental,"/mpiwg/online/experimental",path) @@ -1112,38 +1100,77 @@ class ECHO_collection(CatalogAware, Fold link=viewerUrl%(path+"/"+fileName+"/pageimg") - metalink=metaDataUrl+"/"+path+"/"+fileName+"/index.meta" - try: - - #link="http://nausikaa2.mpiwg-berlin.mpg.de/cgi-bin/toc/toc.x.cgi?dir="+fileName+"&step=thumb" - - newObj=ECHO_resource(fileName,link,metalink,fileName,fileName,fileName,'','book','','','','','','') - self._setObject(fileName,newObj) + metalink=metaDataUrl+re.sub("/mpiwg/online/","",path+"/"+fileName+"/index.meta") + + #metalink=metaDataUrl+"/"+path+"/"+fileName+"/index.meta" + + newindexMeta =re.sub("/mpiwg/online/","",path+"/"+fileName) - genObj=getattr(self,fileName) - #genObj.createIndexFile() - ret+="OK:"+fileName+"
" + try: + type=self.metadata.getBibTypeFromIndexMeta(newindexMeta) + + try: + + #link="http://nausikaa2.mpiwg-berlin.mpg.de/cgi-bin/toc/toc.x.cgi?dir="+fileName+"&step=thumb" + logging.debug("create:"+fileName); + logging.debug("type:"+type); + newObj=ECHO_resource(fileName,link,metalink,fileName,fileName,fileName,'',type,'','','','','','') + self._setObject(fileName,newObj) + + genObj=getattr(self,fileName) + #genObj.createIndexFile() + ret+="OK:"+fileName+"
" + except: + exc_type, exc_value, exc_traceback = sys.exc_info(); + #logging.error("%s %s %s"%[sys.exc_info()[0],ssys.exc_info()[1],; + traceback.print_exception(exc_type, exc_value, exc_traceback, + limit=2, file=sys.stdout) + ret+="ERROR:"+fileName+"
" except: - print "ERROR" - ret+="ERROR:"+fileName+"
" + exc_type, exc_value, exc_traceback = sys.exc_info(); + #logging.error("%s %s %s"%[sys.exc_info()[0],ssys.exc_info()[1],; + traceback.print_exception(exc_type, exc_value, exc_traceback, + limit=2, file=sys.stdout) + ret+="not a file ERROR:"+fileName+"
" return ret if RESPONSE is not None: RESPONSE.redirect('manage_main') - - def changeViewerForm(self): + def changeViewerTemplateSetsForm(self): """change the viewer template set""" - pt=zptFile(self, 'zpt/changeECHOViewer') + pt=zptFile(self, 'zpt/changeViewerTemplateSet') 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 text tool field der Collection not implemented yet!""" + """Lese viewerTemplateSet 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""" @@ -1153,21 +1180,41 @@ class ECHO_collection(CatalogAware, Fold RESPONSE.write("") for resource in resources: - - done,msg=resource[1].changeViewer(newViewer) - if done: - if RESPONSE is not None: - RESPONSE.write("

OK: %s"%resource[0]) - else: - if RESPONSE is not None: - RESPONSE.write("

ERROR: %s (%s)"%(resource[1].absolute_url()+'/ECHO_resource_config_main',resource[0],msg)) + resource[1].newViewer=newViewer; + +# done,msg=resource[1].changeViewer(newViewer) +# if done: +# if RESPONSE is not None: +# RESPONSE.write("

OK: %s"%resource[0]) +# else: +# if RESPONSE is not None: +# RESPONSE.write("

ERROR: %s (%s)"%(resource[1].absolute_url()+'/ECHO_resource_config_main',resource[0],msg)) if RESPONSE is not None: RESPONSE.write("

Done

") - + + def setStartpageFolderForm(self): + """Form for changing the startpage""" + + + pt=zptFile(self, 'zpt/ChangeECHO_resourceStartPageFolder.zpt') + pt.content_type="text/html" + return pt() + + def setStartpageFolder(self,startpage=None,RESPONSE=None): + """change the templates""" + + resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1) + + for resource in resources: + + resource[1].setStartPage(startpage) + + if RESPONSE is not None: + RESPONSE.redirect('manage_main') def copyTitleToInfoXMLFolder(self,RESPONSE=None): """copy title into the title field of info.xml @@ -1202,7 +1249,17 @@ class ECHO_collection(CatalogAware, Fold if RESPONSE is not None: RESPONSE.redirect('manage_main') - + def reloadMetaDataFromStorageWarning(self,RESPONSE=None): + """warning""" + pt=zptFile(self, 'zpt/reloadMetaDataFromStorageWarning.zpt') + pt.content_type="text/html" + return pt() + + def reloadMetaDataFromStorage(self,RESPONSE=None): + """copy metadata from the storage to ECHO""" + + return reloadMetaDataFromStorage(self,RESPONSE) + def getPartnerCopyright(self,name,sonst="generic"): """gibt generisches copyright eines partners aus, sonst behalte jetzige einsteillung""" @@ -1429,14 +1486,18 @@ class ECHO_collection(CatalogAware, Fold {'label':'Main Config','action':'ECHO_collection_config'}, {'label':'Change Labels','action':'changeLabels'}, {'label':'Change Titles','action':'changeTitles'}, + {'label':'Change MetaLinks','action':'changeMetaLinks'}, + {'label':'Change Image Viewer','action':'changeViewerTemplateSetsForm'}, {'label':'Localize','action':'localizeObjects'}, {'label':'Change Weights','action':'changeWeights'}, {'label':'Rerender Labels and Titles','action':'ECHO_rerenderLinksMDWarning'}, {'label':'Export/Import Objects','action':'exportImportObjects_html'}, {'label':'Graphic Coords','action':'ECHO_graphicEntry'}, {'label':'create resources from XML','action':'createRessourcesFromXMLForm'}, - {'label':'Change Image Viewer','action':'changeViewerForm'}, + {'label':'Set Startpage','action':'setStartpageFolderForm'}, + {'label':'Reload Metadata','action':'reloadMetaDataFromStorageWarning'}, {'label':'ImportCollection','action':'importCollection'}, + {'label':'Copy MD for indexing and search','action':'copySearchFields'}, {'label':'Change access rights', 'action':'changeAccessRightsCollectionForm'}, ) @@ -1451,7 +1512,7 @@ class ECHO_collection(CatalogAware, Fold if not hasattr(self,'sortfield'): self.sortfield="weight" - pt=zptFile(self, 'zpt/ChangeECHO_Collection.zpt') + pt=zptFile(self, 'zpt/ChangeECHO_collection.zpt') return pt() @@ -1464,7 +1525,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="",isVisible=True): + 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,fullTextBasisUrl=None): """Aenderung der Properties""" self.secondaryLink=secondaryLink @@ -1476,6 +1537,7 @@ class ECHO_collection(CatalogAware, Fold self.prefix=prefix[0:] self.suffix=suffix[0:] self.setIsVisible(isVisible) + self.fullTextBasisUrl=fullTextBasisUrl setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight) @@ -1484,6 +1546,9 @@ class ECHO_collection(CatalogAware, Fold if RESPONSE is not None: RESPONSE.redirect('manage_main') + def getFullTextBasisUrl(self): + return self.fullTextBasisUrl + def setAlwaysClickable(self,flag="yes"): """set clickable""" if flag=="yes": @@ -1495,15 +1560,15 @@ class ECHO_collection(CatalogAware, Fold def showOverview(self): """overview""" - # use ECHO_overview.html template in this instance - if 'ECHO_overview.html' in self: - return self['ECHO_overview.html']() + # ECHO_overview.html template for this instance + if 'ECHO_overview.html' in self.__dict__.keys(): + return getattr(self,'ECHO_overview.html')() - # use ECHO_overview_main template in path + # ECHO_overview_main template in path if hasattr(self, 'ECHO_overview_main'): return getattr(self, 'ECHO_overview_main')() - # use template from Product + # template from product pt=zptFile(self, 'zpt/ECHO_content_overview.zpt') return pt() @@ -1512,35 +1577,23 @@ class ECHO_collection(CatalogAware, Fold def index_html(self): """standard page""" if self.ZCacheable_isCachingEnabled(): + result = self.ZCacheable_get() if result is not None: # Got a cached value. return result - - # old Zope 2.9 method - #if 'index.html' in self.__dict__.keys(): - # ret=getattr(self,'index.html')() - - # use Zope 2.12 IContainer for child access - if 'index.html' in self: - # use index.html template if it exists - ret = self['index.html']() - - elif 'overview' in self: - # use red-rectangle template when there's an 'overview' + + if 'index.html' in self.__dict__.keys(): + ret=getattr(self,'index.html')() + + elif 'overview' in self.__dict__.keys(): ret=self.showOverview() - - # use getattr for acquisition elif hasattr(self,'collection_index_template'): - # use 'collection_index_template' in acquisition path - ret=self.collection_index_template() - + ret=self.collection_index_template() elif hasattr(self,'main_index_template'): - # use 'main_index_template' in acquisition path + ret=self.main_index_template.__of__(self)(self.main_template) - else: - # use template from Product pt=zptFile(self, 'zpt/ECHO_main_index_template_standard.zpt') pt.content_type="text/html" ret=pt.render() @@ -1569,8 +1622,8 @@ class ECHO_collection(CatalogAware, Fold def area_img(self): """area image""" - bt = browserType(self) - if bt['isIE'] or bt['isN4']: + bt = BrowserCheck(self) + if bt.isIE or bt.isN4: return sendFile(self, 'images/red.gif', 'image/gif') else: return sendFile(self, 'images/reda.png', 'image/png') @@ -1626,37 +1679,6 @@ class ECHO_collection(CatalogAware, Fold return [x.absolute_url() for x in self.getSubCols(searchSimple=searchSimple)] - def exportPageTemplateContents(self,REQUEST=None): - """hole nur den inhalt aus page templates""" - - import json - import base64 - from BeautifulSoup import BeautifulSoup - - - ret={} - #contents=self.ZopeFind(self,obj_metatypes=['ECHO_group','ECHO_resource','ECHO_collection']) - contents=self.ZopeFind(self,obj_metatypes=['Page Template'],search_sub=1) - #contents=self.ZopeFind(self) - - - for content in contents: - colId = content[1].absolute_url().replace(self.absolute_url(),'') - - html=content[1].render() - parsed = BeautifulSoup(html) - - - cnt = parsed.findAll(attrs={'class':'stage'}) - if len(cnt) > 0: #sollte nur einen gebenbt: - ret[colId]=base64.b64encode(cnt[0].prettify()) - - if REQUEST: - REQUEST.response.setHeader("Content-type", "text/json; charset=utf-8") - - - return json.dumps(ret) - Globals.InitializeClass(ECHO_collection) def manage_addECHO_collectionForm(self): @@ -1949,6 +1971,894 @@ 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':'Reload Metadata','action':'reloadMetaDataFromStorageWarning'}, + {'label':'Change Weights','action':'changeWeights'}, + {'label':'Generate from RDF','action':'generateFromRDFForm'}, + {'label':'update Resource Catalog','action':'updateResourceCatalog'}, + {'label':'Copy MD for indexing and search','action':'copySearchFields'}, +) + + + + + def getECHORootURL(self): + return self.absolute_url() + + def getECHORoot(self): + return self + + def copySearchFields(self,RESPONSE=None): + """copys < metadatafields to the object""" + resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1) + + for resource in resources: + + resource[1].copySearchFields() + + if RESPONSE is not None: + RESPONSE.redirect('manage_main') + + 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 reloadMetaDataFromStorageWarning(self,RESPONSE=None): + """warning""" + pt=zptFile(self, 'zpt/reloadMetaDataFromStorageWarning.zpt') + pt.content_type="text/html" + return pt() + + def reloadMetaDataFromStorage(self,RESPONSE=None): + """reload MD from Storage""" + + return reloadMetaDataFromStorage(self,RESPONSE) + + 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="