--- ECHO_content/ECHO_collection.py 2009/02/02 15:08:58 1.302
+++ ECHO_content/ECHO_collection.py 2012/01/04 11:21:10 1.313
@@ -21,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
@@ -57,6 +58,7 @@ import Ft.Xml.XPath
import cStringIO
import sys
+import logging
try:
from psycopg import libpq
@@ -380,7 +382,7 @@ class ECHO_fullText(ZopePageTemplate,ECH
try:
dom=xml.dom.minidom.parseString(self())
except:
- dom=xml.dom.minidom.parseString(self().encode('latin-1'))
+ dom=xml.dom.minidom.parseString(self.utf8ify(self()))
pages=dom.getElementsByTagName('page')
return pages[int(nr)-1].toxml()
@@ -701,6 +703,39 @@ class ECHO_collection(CatalogAware, Fold
path="/mpiwg/online/permanent/shipbuilding"
+ def getSection(self, crumbs=None):
+ """returns the current section name"""
+ # use breadcrumbs if available
+ if crumbs is not None and len(crumbs) > 0:
+ 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 != 'ECHO_root' and p.meta_type!='ECHO_main' and p.meta_type!='ECHO_nav':
+ sec = p.getId()
+ p = p.aq_parent
+
+ return sec
+
+ def getSubSection(self, crumbs=None):
+ """returns the current subsection name"""
+ # use breadcrumbs if available
+ if crumbs is not None and len(crumbs) > 1:
+ return crumbs[1][2].getId()
+
+ p = self
+ sec = None
+ subsec = None
+ # descend parents to the root (and remember the last id)
+ 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 = p.aq_parent
+
+ return subsec
+
def exportImportObjects_html(self,RESPONSE):
"""ImportObject"""
@@ -735,8 +770,9 @@ class ECHO_collection(CatalogAware, Fold
ret+="Cannot import: %s (Already existing?) "%name
os.close(ds)
os.remove(fn)
-
- zf.close()
+
+ zf.close()
+
if ret:
return """
%s"""%ret
if RESPONSE:
@@ -855,17 +891,24 @@ class ECHO_collection(CatalogAware, Fold
if not urn:
urn=self.absolute_url()
- li="""\n"""
+ li="""\n"""
for content in contents:
+ try:
ret+=content[1].getRDF()+"\n"
-
- ret+="""\n"""%urn
+ except:
+ logging.error("getrdf: "+repr(content[1].getRDF()))
+ try:
+ ret+=self.unicodify(content[1].getRDF())+"\n"
+ except:
+ logging.error("--still cannot do it")
+ ret+=repr(content[1].getRDF())+"\n"
+ ret+="""\n"""%urn
for content in contents:
nurn=content[1].absolute_url()
ret+=li%nurn
- return ret+""
+ return ret+""
@@ -875,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')
@@ -994,37 +1043,94 @@ 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,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();
+
- tempPath=re.sub("/mpiwg/online","",path)
- link="http://echo.mpiwg-berlin.mpg.de/zogilib_book?fn="+tempPath+"/"+fileName+"/pageimg"
- metalink=self.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,'generated','book','','','','','','')
- self._setObject(fileName,newObj)
+ if (replacePathExperimental and replacePathExperimental!=''):
+ path=re.sub(replacePathExperimental,"/mpiwg/online/experimental",path)
+
+ if (replacePathPermanent and replacePathPermanent!=''):
+ path=re.sub(replacePathPermanent,"/mpiwg/online/permanent",path)
+
+ link=viewerUrl%(path+"/"+fileName+"/pageimg")
+
+ metalink=metaDataUrl+re.sub("/mpiwg/online/","",path+"/"+fileName+"/index.meta")
- genObj=getattr(self,fileName)
- #genObj.createIndexFile()
- ret+="OK:"+fileName+" "
+ #metalink=metaDataUrl+"/"+path+"/"+fileName+"/index.meta"
+
+ newindexMeta =re.sub("/mpiwg/online/","",path+"/"+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
@@ -1073,32 +1179,21 @@ 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 changeViewerTemplateSets(self,project,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix,RESPONSE=None):
- """change the templates"""
-
- resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1)
-
- for resource in resources:
-
- resource[1].changeViewerTemplateSet(project,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix)
-
- if RESPONSE is not None:
- RESPONSE.redirect('manage_main')
-
def setStartpageFolderForm(self):
"""Form for changing the startpage"""
@@ -1390,6 +1485,7 @@ 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':'Localize','action':'localizeObjects'},
{'label':'Change Weights','action':'changeWeights'},
{'label':'Rerender Labels and Titles','action':'ECHO_rerenderLinksMDWarning'},
@@ -1397,7 +1493,7 @@ class ECHO_collection(CatalogAware, Fold
{'label':'Graphic Coords','action':'ECHO_graphicEntry'},
{'label':'create resources from XML','action':'createRessourcesFromXMLForm'},
{'label':'Set Startpage','action':'setStartpageFolderForm'},
- {'label':'Change Viewer Templates and Image Viewer','action':'changeViewerTemplateSetsForm'},
+ {'label':'Change Image Viewer','action':'changeViewerTemplateSetsForm'},
{'label':'Reload Metadata','action':'reloadMetaDataFromStorageWarning'},
{'label':'ImportCollection','action':'importCollection'},
{'label':'Copy MD for indexing and search','action':'copySearchFields'},
@@ -1459,8 +1555,15 @@ class ECHO_collection(CatalogAware, Fold
def showOverview(self):
"""overview"""
+ # ECHO_overview.html template for this instance
if 'ECHO_overview.html' in self.__dict__.keys():
return getattr(self,'ECHO_overview.html')()
+
+ # ECHO_overview_main template in path
+ if hasattr(self, 'ECHO_overview_main'):
+ return getattr(self, 'ECHO_overview_main')()
+
+ # template from product
pt=zptFile(self, 'zpt/ECHO_content_overview.zpt')
return pt()
@@ -1613,17 +1716,17 @@ class ECHO_group(ECHO_collection):
if not urn:
urn=self.absolute_url()
- li="""\n"""
+ li="""\n"""
for content in contents:
- ret+=content[1].getRDF()+"\n"
+ ret+=self.unicodify(content[1].getRDF())+"\n"
- ret+="""\n"""%urn
+ ret+="""\n"""%urn
for content in contents:
nurn=content[1].absolute_url()
ret+=li%nurn
- return ret+""
+ return ret+""
def index_html(self):
"""standard page"""
@@ -1807,7 +1910,8 @@ class ECHO_userFolder(UserFolder):
return 1
return 0
-Globals.default__class_init__(ECHO_userFolder)
+# ROC: problem with 2.12
+#Globals.default__class_init__(ECHO_userFolder)
@@ -1873,7 +1977,6 @@ class ECHO_root(Folder,Persistent,Implic
getSubCols = ECHO_helpers.getSubCols
manage_options=Folder.manage_options+(
- {'label':'Main Config','action':'ECHO_copyright_configForm'},
{'label':'Reload Metadata','action':'reloadMetaDataFromStorageWarning'},
{'label':'Change Weights','action':'changeWeights'},
{'label':'Generate from RDF','action':'generateFromRDFForm'},
@@ -1882,6 +1985,8 @@ class ECHO_root(Folder,Persistent,Implic
)
+
+
def getECHORootURL(self):
return self.absolute_url()
@@ -2058,8 +2163,8 @@ class ECHO_root(Folder,Persistent,Implic
global key
global value
seq=""
- if name=="RDF:Seq":
- key=attrs.get('RDF:about')
+ if name=="rdf:Seq":
+ key=attrs.get('rdf:about')
try: # teste ob liste
x=seqs[key][0]
except:
@@ -2067,20 +2172,20 @@ class ECHO_root(Folder,Persistent,Implic
seqs[key]=[]
- elif name=="RDF:Description":
- key=attrs.get('RDF:about')
+ elif name=="rdf:Description":
+ key=attrs.get('rdf:about')
- elif name=="RDF:li":
- name=attrs.get('RDF:resource')
+ elif name=="rdf:li":
+ name=attrs.get('rdf:resource')
seqs[key].append(name)
- elif name=="ECHONAVIGATION:type":
+ elif name=="echonavigation:type":
value="type"
- elif name=="ECHONAVIGATION:name":
+ elif name=="echonavigation:name":
value="name"
- elif name=="ECHONAVIGATION:linkClickable":
+ elif name=="echonavigation:linkClickable":
value="linkClickable"
def end_element(name):
@@ -2161,17 +2266,17 @@ class ECHO_root(Folder,Persistent,Implic
ret=getRDFDescription(self,self.absolute_url(),urn=urn)
- li="""\n"""
+ li="""\n"""
for content in contents:
ret+=content[1].getRDF()+"\n"
- ret+="""\n"""%urn
+ ret+="""\n"""%urn
for content in contents:
nurn=content[1].absolute_url()
ret+=li%nurn
- return ret+""
+ return ret+""
def showContent(self,path):
@@ -2238,7 +2343,7 @@ class ECHO_root(Folder,Persistent,Implic
retStr+="""