Annotation of ECHO_content/ECHO_collection.py, revision 1.236
1.13 dwinter 1: """New version of the product started February, 8th. Without scientific classification, use content-type for further classification."""
1.1 casties 2: """Echo collection provides the classes for the ECHO content web-site.
3:
4: class ECHO_collection is the basis class for an ECHO collection.
5:
6: class ECHO_resource contains information on ECHO resources (e.g. an Display environment for Metadata
7:
8: class ECHO_externalLink contains information on externalLinks
9:
10:
11: """
1.194 dwinter 12: try:
1.236 ! dwinter 13: from reportlab.pdfgen import canvas
! 14: from reportlab.lib.pagesizes import A4
1.194 dwinter 15: except:
1.236 ! dwinter 16: print "PDF generation will not work"
! 17:
1.192 dwinter 18:
1.1 casties 19: import string
1.192 dwinter 20: import tempfile
1.14 dwinter 21: import re
1.29 dwinter 22: import os
1.1 casties 23: import OFS.Image
24: from types import *
1.154 dwinter 25: from OFS.Cache import Cacheable
1.1 casties 26: from OFS.Image import Image
27: from Globals import DTMLFile
28: from OFS.Folder import Folder
29: from OFS.SimpleItem import SimpleItem
30: from AccessControl import ClassSecurityInfo
1.85 dwinter 31: from AccessControl.User import UserFolder
1.1 casties 32: from Globals import InitializeClass
33: from Globals import DTMLFile
1.84 dwinter 34: import Globals
1.1 casties 35: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
36: from Products.PageTemplates.PageTemplate import PageTemplate
1.29 dwinter 37: from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
38: from Globals import Persistent, package_home
1.1 casties 39: from Acquisition import Implicit
1.236 ! dwinter 40: from Products.ZCatalog.CatalogPathAwareness import CatalogAware
1.189 dwinter 41:
1.141 dwinter 42: import urllib
1.225 dwinter 43: import cgi
1.177 dwinter 44: import smtplib
1.153 dwinter 45: import time
1.173 dwinter 46: from Ft.Xml.Domlette import NonvalidatingReader
1.236 ! dwinter 47: from Ft.Xml.Domlette import PrettyPrint, Print
1.173 dwinter 48: from Ft.Xml import EMPTY_NAMESPACE
49:
50: import Ft.Xml.XPath
51: import cStringIO
1.179 dwinter 52: import zLOG
1.84 dwinter 53:
1.50 dwinter 54: try:
1.236 ! dwinter 55: from psycopg import libpq
1.50 dwinter 56: except:
1.236 ! dwinter 57: try:
! 58: from pyPgSQL import libpq
! 59: except:
! 60: print "ECHO_collection: Warning - No libpq imported!"
! 61:
1.14 dwinter 62: import xml.dom.minidom
1.1 casties 63:
64: import urllib
65: import xml.dom.minidom
1.41 dwinter 66: import ECHO_helpers
1.189 dwinter 67: from ECHO_helpers import *
68: from ECHO_language import *
1.217 dwinter 69: from ECHO_movie import *
1.163 dwinter 70:
1.162 dwinter 71: #regexp for extracting elements from xml
72: patternTXT=r"<\s*txt.*?>(.*?)</txt>"
73: regexpTXT = re.compile(patternTXT, re.IGNORECASE + re.DOTALL)
74: patternPage=r"<\s*page.*?>(.*?)</page>"
75: regexpPage = re.compile(patternPage, re.IGNORECASE + re.DOTALL)
76:
1.236 ! dwinter 77:
1.1 casties 78:
1.202 casties 79: def setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordstrs=""):
1.1 casties 80:
81: """Allegemeine Informationen zu einer ECHO Collection"""
82:
83: self.label = label
84: self.title=title
85: self.description=description
1.27 dwinter 86: self.contentType=contentType
1.1 casties 87: self.responsible=responsible
88: self.credits=toList(credits)
89: self.weight=weight
90:
1.228 dwinter 91: class ECHO_locale(ZopePageTemplate):
1.236 ! dwinter 92: """localisierung"""
1.228 dwinter 93:
1.236 ! dwinter 94: meta_type="ECHO_locale"
1.228 dwinter 95:
1.236 ! dwinter 96: def __init__(self,id,lang,title,label,text=None,content_type=None):
! 97: self.lang=lang
! 98: self.title=title
! 99: self.label=label
! 100: if text:
! 101: self.pt_edit(text, content_type)
! 102: self.id=id
! 103:
! 104: manage_options = ZopePageTemplate.manage_options+(
! 105: {'label':'Main Config','action':'change_ECHO_localeForm'},
! 106: )
! 107:
! 108: def change_ECHO_localeForm(self):
! 109: """change form"""
! 110: pt=zptFile(self, 'zpt/ChangeECHO_localeForm.zpt')
! 111: return pt()
! 112:
! 113: def change_ECHO_locale(self,lang,title,label,text=None,content_type=None,RESPONSE=None):
! 114: """change echo locale"""
! 115: self.lang=lang
! 116: self.title=title
! 117: self.label=label
! 118: if not text is None:
! 119: self.pt_edit(text, content_type)
1.228 dwinter 120:
1.236 ! dwinter 121: if RESPONSE is not None:
! 122: RESPONSE.redirect('manage_main')
1.228 dwinter 123:
1.236 ! dwinter 124:
1.228 dwinter 125: def manage_addECHO_localeForm(self):
1.236 ! dwinter 126: """Form for adding"""
! 127: pt=zptFile(self, 'zpt/AddECHO_localeForm.zpt')
! 128: return pt()
1.228 dwinter 129:
130: def manage_addECHO_locale(self,lang,title,label,text=None,content_type=None,RESPONSE=None):
1.236 ! dwinter 131: """add echo locale"""
1.228 dwinter 132:
1.236 ! dwinter 133: id="locale_"+lang
! 134:
! 135: self._setObject(id, ECHO_locale(id,lang,title,label,text,content_type))
! 136: if RESPONSE is not None:
! 137: RESPONSE.redirect('manage_main')
1.228 dwinter 138:
139:
1.189 dwinter 140: class ECHO_copyright(Folder,ECHO_basis):
1.236 ! dwinter 141: """Copyright informationen"""
! 142: meta_type="ECHO_copyright"
! 143:
! 144:
! 145:
! 146: def __init__(self,id,title,copyrights):
! 147: """init"""
! 148: self.title=title
! 149: self.id=id
! 150: self.copyrights=copyrights[0:]
1.1 casties 151:
1.236 ! dwinter 152: def getCopyrights(self):
! 153: """return coyprights"""
! 154: return self.copyrights
! 155:
! 156: manage_options = Folder.manage_options+(
! 157: {'label':'Main Config','action':'ECHO_copyright_configForm'},
! 158: )
! 159:
! 160:
! 161: def ECHO_copyright_configForm(self):
! 162: """change form"""
! 163: pt=zptFile(self, 'zpt/ChangeECHO_copyright')
! 164: pt.content_type="text/html"
! 165: return pt()
! 166:
! 167: def ECHO_copyright_config(self,title,RESPONSE=None):
! 168: """change"""
! 169: self.title=title
! 170: self.copyrights=[]
! 171: self.copyrights=getCopyrightsFromForm(self,self.REQUEST.form)[0:]
1.98 dwinter 172:
1.236 ! dwinter 173: if RESPONSE is not None:
! 174: RESPONSE.redirect('manage_main')
! 175:
! 176:
1.98 dwinter 177: def manage_addECHO_copyrightForm(self):
178: """Form for adding"""
1.195 casties 179: pt=zptFile(self, 'zpt/AddECHO_copyright.zpt')
1.98 dwinter 180: return pt()
1.1 casties 181:
1.98 dwinter 182: def manage_addECHO_copyright(self, id,title,RESPONSE=None):
1.236 ! dwinter 183: """add the copyright"""
! 184:
! 185: meta_type="ECHO_copyright"
! 186:
! 187: #first generate copyrights as list of tripels (mediaType,partner,copyrightType)
! 188:
! 189:
1.1 casties 190:
1.236 ! dwinter 191: self._setObject(id, ECHO_copyright(id, title,getCopyrightsFromForm(self,self.REQUEST.form)))
! 192:
! 193: if RESPONSE is not None:
! 194: RESPONSE.redirect('manage_main')
! 195:
1.189 dwinter 196: class ECHO_layoutTemplate(ZopePageTemplate,ECHO_basis):
1.29 dwinter 197: """Create a layout Template for different purposes"""
198:
199: meta_type="ECHO_layoutTemplate"
200:
201: def __init__(self, id, text=None, content_type=None,EchoType=None):
202: self.id = str(id)
203:
204: self.ZBindings_edit(self._default_bindings)
205: if text is None:
1.212 dwinter 206: self._default_content_fn = os.path.join(package_home(globals()),'zpt','ECHO_%s_template_standard.zpt'%EchoType)
1.29 dwinter 207: text = open(self._default_content_fn).read()
208: self.pt_edit(text, content_type)
209:
210:
211: def manage_addECHO_layoutTemplateForm(self):
212: """Form for adding"""
1.195 casties 213: pt=zptFile(self, 'zpt/AddECHO_layoutTemplate.zpt')
1.29 dwinter 214: return pt()
215:
216:
217: def manage_addECHO_layoutTemplate(self, EchoType,title=None,REQUEST=None):
218: "Add a Page Template with optional file content."
219: if type(EchoType)==StringType:
220: EchoTypes=[EchoType]
221: else:
222: EchoTypes=EchoType
223:
224: for singleType in EchoTypes:
1.32 dwinter 225:
1.29 dwinter 226: id = str(singleType)+"_template"
227: if REQUEST is None:
228: self._setObject(id, ECHO_layoutTemplate(id, text,EchoType=singleType))
229: ob = getattr(self, id)
230:
231: if title:
232: ob.pt_setTitle(title)
233: return ob
234: else:
235: file = REQUEST.form.get('file')
236: headers = getattr(file, 'headers', None)
237: if headers is None or not file.filename:
238: zpt = ECHO_layoutTemplate(id,EchoType=singleType)
239: else:
240: zpt = ECHO_layoutTemplate(id, file, headers.get('content_type'))
241:
242: self._setObject(id, zpt)
243: ob = getattr(self, id)
244: if title:
245: ob.pt_setTitle(title)
246:
247: try:
248: u = self.DestinationURL()
249: except AttributeError:
250: u = REQUEST['URL1']
251:
252:
253: REQUEST.RESPONSE.redirect(u+'/manage_main')
254: return ''
1.1 casties 255:
1.190 dwinter 256: class ECHO_fullText(ZopePageTemplate,ECHO_basis,ECHO_language):
1.236 ! dwinter 257: """echo fulltext in xml"""
1.163 dwinter 258:
1.236 ! dwinter 259: meta_type="ECHO_fullText"
1.163 dwinter 260:
1.236 ! dwinter 261:
! 262: def getPage(self,nr='1'):
! 263: """get page n"""
! 264: #return self().encode('latin-1','ignore')
! 265: dom=xml.dom.minidom.parseString(self().encode('utf-8','ignore'))
! 266: pages=dom.getElementsByTagName('page')
! 267:
! 268: return pages[int(nr)-1].toxml()
! 269:
1.163 dwinter 270: # Product registration and Add support
271: manage_addECHO_fullTextForm = PageTemplateFile(
272: 'zpt/AddECHO_fullText.zpt', globals())
273:
274: def manage_addECHO_fullText(self, id, title=None, text=None,
275: REQUEST=None, submit=None):
276: "Add a Page Template with optional file content."
277:
278: id = str(id)
279: if REQUEST is None:
280: self._setObject(id, ECHO_fullText(id, text))
281: ob = getattr(self, id)
282: if title:
283: ob.pt_setTitle(title)
284: return ob
285: else:
286: file = REQUEST.form.get('file')
287: headers = getattr(file, 'headers', None)
288: if headers is None or not file.filename:
289: zpt = ECHO_fullText(id)
290: else:
291: zpt = ECHO_fullText(id, file, headers.get('content_type'))
292:
293: self._setObject(id, zpt)
294:
295: try:
296: u = self.DestinationURL()
297: except AttributeError:
298: u = REQUEST['URL1']
299:
300: if submit == " Add and Edit ":
1.195 casties 301: u = "%s/%s" % (u, urllib.quote(id))
1.163 dwinter 302: REQUEST.RESPONSE.redirect(u+'/manage_main')
303: return ''
1.142 dwinter 304:
1.192 dwinter 305:
1.236 ! dwinter 306: class ECHO_resource(CatalogAware,Folder,Persistent,ECHO_basis):
1.1 casties 307: """ECHO Ressource"""
1.123 dwinter 308: security=ClassSecurityInfo()
1.1 casties 309: meta_type='ECHO_resource'
1.236 ! dwinter 310: default_catalog='resourceCatalog'
! 311:
! 312: # viewClassificationList=viewClassificationListMaster
1.1 casties 313:
1.236 ! dwinter 314: def PrincipiaSearchSource(self):
! 315: """Return cataloguable key for ourselves."""
! 316: return str(self)
1.1 casties 317:
1.41 dwinter 318: getSubCols = ECHO_helpers.getSubCols
1.98 dwinter 319:
1.236 ! dwinter 320: def reindex(self):
! 321: """generate fields for indexing and reindex"""
! 322: import urlparse
! 323: #TODO: korrigieren des metalink pfades konfigurierbar machen
! 324: splitted= [x for x in urlparse.urlparse(self.metalink)]
! 325: splitted[1]="foxridge.mpiwg-berlin.mpg.de"[0:]
! 326:
! 327: if splitted[0]=="http":
! 328: self.metalink=urlparse.urlunparse(splitted)
! 329:
! 330:
! 331: self.fullTextUrl=self.getFullTextXML(noredirect="yes")
! 332:
! 333: #TODO: korrigieren relative url to absoluter url volltexten, konfigurierbar?
! 334: splitted= [x for x in urlparse.urlparse(self.fullTextUrl)]
! 335: if splitted[0]=="":
! 336: splitted[0]="http"
! 337: splitted[1]="foxridge.mpiwg-berlin.mpg.de"[0:]
! 338:
! 339: self.fullTextUrl=urlparse.urlunparse(splitted)
! 340:
! 341: self.imagePath=self.getImagePath()
! 342:
! 343: self.reindex_object()
! 344:
1.192 dwinter 345:
346: security.declareProtected('View','createPDF')
347: def createPDF(self,RESPONSE=None,local=None,dpi=150):
1.236 ! dwinter 348: """erzeuge pdf file"""
! 349: pages=1
! 350: dpi=float(dpi)
! 351: imagePath=self.getImagePath().replace("/mpiwg/online","")
! 352:
! 353:
! 354: image="http://nausikaa2.mpiwg-berlin.mpg.de/digitallibrary/servlet/Scaler?fn="+imagePath+"&dw=%i&dh=%i&pn=%i"
! 355: xmlInfo="http://nausikaa2.mpiwg-berlin.mpg.de/digitallibrary/dlInfo-xml.jsp?fn="+imagePath
! 356:
! 357: dom=xml.dom.minidom.parse(urllib.urlopen(xmlInfo))
! 358: for parameter in dom.getElementsByTagName('parameter'):
! 359: if parameter.getAttribute('name')=="pt":
! 360: pages=int(parameter.getAttribute('value'))
! 361: break
! 362:
! 363:
! 364: tempdir="/tmp/archivesImageServer"
! 365: if not os.path.exists(tempdir):
! 366: os.mkdir(tempdir)
1.193 dwinter 367:
1.236 ! dwinter 368: tmpPath=tempfile.mkdtemp(dir=tempdir)
! 369:
1.192 dwinter 370:
1.236 ! dwinter 371: tmpZip=tempfile.mktemp(dir=tempdir)
1.193 dwinter 372:
1.236 ! dwinter 373: tmpFn=os.path.split(tmpZip)[1]
1.192 dwinter 374:
375:
1.194 dwinter 376:
1.192 dwinter 377:
1.236 ! dwinter 378: if RESPONSE:
! 379: RESPONSE.setHeader("Content-Type","text/html")
! 380: RESPONSE.write("<h1>I am creating the pdf</h1>")
! 381: txt="<h3>1. step: getting the images( %i pages)</h3>"%pages
! 382: RESPONSE.write(txt)
1.192 dwinter 383:
1.236 ! dwinter 384: c=canvas.Canvas(tmpZip)
! 385: for i in range(1,pages+1):
! 386: if RESPONSE:
! 387: RESPONSE.write(str("<p>Get Page: %i<br>\n"%i))
! 388: faktor=dpi/72.0
! 389:
! 390: fn=tmpPath+"/%i"%i
1.192 dwinter 391:
1.236 ! dwinter 392: width,height=A4
! 393: #print image%(width*faktor,height*faktor,i)
! 394: url=urllib.urlopen(image%(width*faktor,height*faktor,i)).read()
! 395: fh=file(fn,"w")
! 396: fh.write(url)
! 397: fh.close()
1.192 dwinter 398:
399:
400:
1.236 ! dwinter 401: c.drawImage(fn,0,0,width=width,height=height)
! 402: c.showPage()
! 403: c.save()
! 404: if RESPONSE:
! 405: RESPONSE.write("<p>finished<br>\n")
! 406:
! 407: if RESPONSE:
! 408: len=os.stat(tmpZip)[6]
! 409: downloadUrl=self.absolute_url()+"/downloadPDF"
! 410: RESPONSE.write("""<h1><a href="downloadPDF?fn=%s">Click here for download ( %i Byte)</a></h1>\n"""%(tmpFn,len))
! 411: RESPONSE.write("""<p>The file will be stored for a while, you can download it later, the URL is:</p>
! 412: <p><a href="downloadPDF?fn=%s">%s?fn=%s</a></h1>\n"""%(tmpFn,downloadUrl,tmpFn))
! 413: RESPONSE.close()
1.192 dwinter 414:
415:
416: def downloadPDF(self,fn):
1.236 ! dwinter 417: """download prepared set"""
! 418: filename="/tmp/archivesImageServer/"+fn
! 419: namePDF=self.getId()+".pdf"
! 420: self.REQUEST.RESPONSE.setHeader("Content-Disposition","""attachement; filename="%s" """%namePDF)
! 421: self.REQUEST.RESPONSE.setHeader("Content-Type","application/octet-stream")
! 422: len=os.stat(filename)[6]
! 423: self.REQUEST.RESPONSE.setHeader("Content-Length",len)
! 424: images=file(filename).read()
! 425: self.REQUEST.RESPONSE.write(images)
! 426: self.REQUEST.RESPONSE.close()
1.192 dwinter 427:
428:
1.143 dwinter 429: def getRDF(self,urn=None):
1.236 ! dwinter 430: """rdf"""
! 431: ret=getRDFDescription(self,self.link,urn=urn)
! 432: return ret+self.createSubElementRDF(urn=urn)
1.146 dwinter 433:
1.190 dwinter 434:
1.132 dwinter 435: def getAccessRightSelectorHTML(self,outlook="select"):
1.236 ! dwinter 436: """htmlselector"""
! 437: values=['free','mpiwg']
! 438:
! 439: if outlook=="select":
! 440: ret="""<select name="%s">"""%self.getId()
! 441:
! 442: for value in values:
! 443: if value==self.getAccessRightMD():
! 444: ret+="<option selected>%s</option>"%value
! 445: else:
! 446: ret+="<option>%s</option>"%value
! 447: return ret+"</select>"
! 448:
! 449: else:
! 450: ret=""
! 451: for value in values:
! 452:
! 453: if value==self.getAccessRightMD():
! 454: ret+="""<input type="radio" name="%s" value="%s" checked>%s"""%(self.getId(),value,value)
! 455: else:
! 456: ret+="""<input type="radio" name="%s" value="%s">%s"""%(self.getId(),value,value)
! 457: return ret
1.132 dwinter 458:
459:
460:
461: def getAccessRightMD(self):
1.236 ! dwinter 462: """set accessright"""
! 463: url=self.metalink
! 464:
! 465: try:
! 466: geturl=""
! 467: for line in ECHO_helpers.urlopen(url).readlines():
! 468: geturl=geturl+line
! 469:
! 470:
! 471: except:
! 472: return (None,"Cannot open: "+url)
! 473:
! 474: try:
! 475: dom=xml.dom.minidom.parseString(geturl)
! 476: root=dom.getElementsByTagName('resource')[0]
! 477: except:
! 478: return (None,"Cannot parse: "+url+"<br>"+geturl)
1.132 dwinter 479:
1.236 ! dwinter 480: internal=dom.getElementsByTagName('internal')
! 481: if internal:
! 482: institution=dom.getElementsByTagName('institution')
! 483: return getText(institution[0].childNodes)
! 484:
! 485: free=dom.getElementsByTagName('free')
! 486: if free:
! 487: return "free"
1.132 dwinter 488:
1.236 ! dwinter 489: return "free" #default free
1.132 dwinter 490:
491: def changeAccessRightMD(self,accessright,RESPONSE=None):
1.236 ! dwinter 492: """change the rights"""
! 493:
! 494: params="accessright=%s"%accessright
1.132 dwinter 495:
496:
1.236 ! dwinter 497: #print ECHO_helpers.urlopen(self.absolute_url()+'/setAccessRightXML'+'?'+params).read()
1.132 dwinter 498:
1.236 ! dwinter 499:
! 500: ECHO_helpers.urlopen('http://xserve02.mpiwg-berlin.mpg.de:18880/echo_nav/storage/downloadExternalXML?index_meta_url=%s&xml_url=%s'%(self.metalink,self.absolute_url()+'/setAccessRightXML'+urllib.quote('?'+params))).read()
1.132 dwinter 501:
1.236 ! dwinter 502:
! 503: if RESPONSE is not None:
! 504: RESPONSE.redirect('manage_main')
1.132 dwinter 505:
1.236 ! dwinter 506:
1.132 dwinter 507: def setAccessRightXML(self,accessright):
1.236 ! dwinter 508: """set accessright"""
! 509: url=self.metalink
! 510:
! 511: try:
! 512: geturl=""
! 513: for line in ECHO_helpers.urlopen(url).readlines():
! 514: geturl=geturl+line
! 515:
! 516:
! 517: except:
! 518: return (None,"Cannot open: "+url)
! 519:
! 520: try:
! 521: dom=xml.dom.minidom.parseString(geturl)
! 522: root=dom.getElementsByTagName('resource')[0]
! 523: except:
! 524: return (None,"Cannot parse: "+url+"<br>"+geturl)
! 525:
! 526: metanodes=dom.getElementsByTagName('access-conditions')
1.132 dwinter 527:
1.236 ! dwinter 528: if not metanodes:
! 529: nodenew=dom.createElement('access-conditions')
! 530: root.appendChild(nodenew)
! 531: metanode=nodenew
! 532: else:
! 533: metanode=metanodes[0]
! 534:
! 535: accesses=metanode.getElementsByTagName('access')
! 536:
! 537: if not accesses:
! 538: nodenew2=dom.createElement('access')
! 539: metanode.appendChild(nodenew2)
! 540: metanode2=nodenew2
! 541: else:
! 542: metanode2=accesses[0]
! 543:
! 544: internal=metanode.getElementsByTagName('internal')
! 545:
! 546: if internal:
! 547: metanode2.removeChild(internal[0]).unlink()
1.132 dwinter 548:
1.236 ! dwinter 549: free=metanode.getElementsByTagName('free')
! 550:
! 551: if free:
! 552: metanode2.removeChild(internal[0]).unlink()
! 553:
! 554:
! 555: if accessright=='free':
! 556: nodenew3=dom.createElement('free')
! 557: metanode2.appendChild(nodenew3)
! 558: elif accessright=='mpiwg':
! 559: nodenew3=dom.createElement('internal')
! 560: nodenew4=dom.createElement('institution')
! 561: metanodetext=dom.createTextNode('mpiwg')
! 562: nodenew4.appendChild(metanodetext)
! 563: nodenew3.appendChild(nodenew4)
! 564: metanode2.appendChild(nodenew3)
! 565:
! 566: return dom.toxml().encode('utf-8')
1.132 dwinter 567:
1.125 dwinter 568: def setStartPageForm(self):
1.236 ! dwinter 569: """Form for changing the startpage"""
1.125 dwinter 570:
1.236 ! dwinter 571:
! 572: pt=zptFile(self, 'zpt/ChangeECHO_resourceStartPage.zpt')
1.125 dwinter 573: pt.content_type="text/html"
574: return pt()
575:
1.182 dwinter 576:
577: def createImageUrl(self,pn=1):
1.236 ! dwinter 578: """create ImageUrl"""
1.184 dwinter 579:
1.236 ! dwinter 580:
! 581: resourcepath=readFieldFromXML(self.metalink,'resource','archive-path')
! 582:
! 583: digiliburlprefix=readFieldFromXML(self.metalink,'texttool','digiliburlprefix')
! 584: images=readFieldFromXML(self.metalink,'texttool','image')
1.184 dwinter 585:
586:
1.236 ! dwinter 587: if (not resourcepath) or (not digiliburlprefix) or (not images):
! 588: zLOG.LOG("ECHO (createImageUrl)",zLOG.ERROR,"Cannot create ImageUrl for %s"%self.absolute_url())
! 589: return None
! 590: resourcepath=resourcepath.replace('/mpiwg/online','')
! 591: if not digiliburlprefix: digiliburlprefix="http://echo.mpiwg-berlin.mpg.de/zogilib?"
1.182 dwinter 592:
1.236 ! dwinter 593: if (not images) or (not resourcepath): return None
1.182 dwinter 594:
1.236 ! dwinter 595: return "%sfn=%s&pn=%i"%(digiliburlprefix,resourcepath+"/"+images,pn)
1.182 dwinter 596:
1.183 dwinter 597: def copyTitleToInfoXML(self,RESPONSE=None):
1.236 ! dwinter 598: """copy title from the resource"""
! 599: presentationXML=readFieldFromXML(self.metalink,'texttool','presentation')
! 600: resourcepath=readFieldFromXML(self.metalink,'resource','archive-path')
! 601: if (not presentationXML) or (not resourcepath):
! 602: if RESPONSE:
! 603: RESPONSE.write("Error: %s\n"%self.getId())
! 604: else:
! 605: return None,self.absolute_url()
! 606:
! 607: try:
! 608: fh=file(os.path.join(resourcepath,presentationXML),'w')
! 609: fh.write("""<info>
! 610: <author></author>
! 611: <title>%s</title>
! 612: <date></date>
! 613: <display>yes</display>
! 614: </info>"""%self.title)
! 615: fh.close()
! 616: return 1,self.getId()
! 617: except:
! 618: if RESPONSE:
! 619: RESPONSE.write("Error: %s\n"%self.getId())
! 620: else:
! 621: return None,self.absolute_url()
1.183 dwinter 622:
1.236 ! dwinter 623:
1.124 dwinter 624: def setStartPage(self,startpage=None,RESPONSE=None):
1.236 ! dwinter 625: """set start page, if no startpage defined use the generic one of the resource"""
1.124 dwinter 626:
1.236 ! dwinter 627: if (not (type(startpage)==StringType)):
! 628: if ("__generic" in startpage): # checke ob generic in der liste
! 629: startpage=self.absolute_url()+"/startpage_html"
! 630: elif ("__firstPage" in startpage): # checke ob generic in der liste
! 631: startpage=self.createImageUrl()
! 632:
! 633: if (not startpage):
! 634: startpage=self.absolute_url()+"/startpage_html"
! 635: elif (startpage=="__generic"):
! 636: startpage=self.absolute_url()+"/startpage_html"
! 637: elif (startpage=="__firstPage"):
! 638: startpage=self.createImageUrl()
! 639:
! 640: params="startpage=%s"%startpage
! 641: #print 'http://xserve02.mpiwg-berlin.mpg.de:18880/echo_nav/storage/downloadExternalXML?index_meta_url=%s&xml_url=%s'%(self.metalink,self.absolute_url()+'/newMetaXML'+urllib.quote('?'+params))
! 642:
! 643: ECHO_helpers.urlopen('http://xserve02.mpiwg-berlin.mpg.de:18880/echo_nav/storage/downloadExternalXML?index_meta_url=%s&xml_url=%s'%(self.metalink,self.absolute_url()+'/newMetaXML'+urllib.quote('?'+params))).read()
! 644:
! 645:
! 646: path=self.metalink
! 647:
! 648: path=re.sub(self.REQUEST['SERVER_URL'],'',path)
! 649: path=re.sub('http://'+self.REQUEST['HTTP_HOST'],'',path)
! 650:
! 651: path=re.sub('http://foxridge.mpiwg-berlin.mpg.de:8080','',path) # falls foxridge als server
! 652: path=re.sub('http://foxridge.mpiwg-berlin.mpg.de','',path) # falls foxridge als server
! 653: path=re.sub('http://foxridge.rz-berlin.mpg.de:8080','',path) # falls foxridge als server
1.156 dwinter 654: path=re.sub('http://content.mpiwg-berlin.mpg.de','',path) # falls content als server
1.236 ! dwinter 655: path=re.sub('http://foxridge.rz-berlin.mpg.de','',path) # falls foxridge als server
! 656: path=re.sub('http://vision.mpiwg-berlin.mpg.de','',path) # falls vision als server
! 657: path=re.sub('http://xserve02.mpiwg-berlin.mpg.de:18880','',path) # falls vision als server
! 658: path=re.sub('http://echo.mpiwg-berlin.mpg.de','',path) # falls echo
! 659: path=re.sub('/index.meta','',path)
1.124 dwinter 660:
661:
1.236 ! dwinter 662: ECHO_helpers.urlopen("http://nausikaa2.rz-berlin.mpg.de:86/cgi-bin/toc/admin/reg.cgi?path=%s"%path).readlines()
1.124 dwinter 663:
1.236 ! dwinter 664: if RESPONSE is not None:
! 665: RESPONSE.redirect('manage_main')
1.124 dwinter 666:
1.123 dwinter 667: def changeViewerTemplateSetForm(self):
1.236 ! dwinter 668: """change the viewer template set"""
! 669: pt=zptFile(self, 'zpt/changeResourceViewerTemplateSet')
1.123 dwinter 670: return pt()
671:
672:
1.182 dwinter 673:
1.123 dwinter 674: def getTextToolsField(self,name,default=''):
675: """Lese Textoolsfelder aus index.meta im path aus"""
676:
677: try:
678: dom=xml.dom.minidom.parse(self.metalink)
679: node=dom.getElementsByTagName('texttool')[0] #getNode
680: subnode=node.getElementsByTagName(name)[0]
681:
682: # bei text wird nur der Folder gebraucht
683: if name=="text":
684: splitted=getText(subnode.childNodes).split("/")
685: return splitted[len(splitted)-2]
686: else:
687: return getText(subnode.childNodes)
688: except:
689: return default
690:
691:
1.154 dwinter 692: def changeViewerTemplateSet(self,project,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix,RESPONSE=None):
1.236 ! dwinter 693: """changeit"""
1.123 dwinter 694:
1.236 ! dwinter 695: paramList=['project','startpage','xslt','thumbtemplate','topbar','digiLibTemplate','digiliburlprefix']
1.123 dwinter 696:
1.236 ! dwinter 697:
! 698: #writeMetadata(self.metalink,self.metaDataHash,project,None,xslt,thumbtemplate,topbar,digiLibTemplate)
1.123 dwinter 699:
1.236 ! dwinter 700: params="project=%s&xslt=%s&thumbtemplate=%s&topbar=%s&digiLibTemplate=%s&digiliburlprefix=%s"%(project,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix)
1.124 dwinter 701:
1.236 ! dwinter 702:
! 703: ECHO_helpers.urlopen('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))).read()
1.123 dwinter 704:
1.236 ! dwinter 705: #print self.absolute_url()+'/newMetaXML'+urllib.quote'?'+params)
! 706: # hack Pfad auf die Dokumente
! 707: path=self.metalink
! 708:
! 709:
1.123 dwinter 710:
1.236 ! dwinter 711: path=re.sub('/index.meta','',path)
1.123 dwinter 712:
1.236 ! dwinter 713: path=re.sub(self.REQUEST['SERVER_URL'],'',path)
! 714: path=re.sub('http://'+self.REQUEST['HTTP_HOST'],'',path)
1.127 dwinter 715:
1.236 ! dwinter 716: path=re.sub('http://foxridge.mpiwg-berlin.mpg.de:8080','',path) # falls foxridge als server
! 717: path=re.sub('http://foxridge.mpiwg-berlin.mpg.de:8080','',path) # falls foxridge als server
! 718: path=re.sub('http://foxridge.mpiwg-berlin.mpg.de','',path) # falls foxridge als server
1.127 dwinter 719:
1.236 ! dwinter 720: path=re.sub('http://foxridge.rz-berlin.mpg.de:8080','',path) # falls foxridge als server
! 721: path=re.sub('http://foxridge.rz-berlin.mpg.de','',path) # falls foxridge als server
! 722: path=re.sub('http://content.mpiwg-berlin.mpg.de','',path) # falls content als server
! 723: path=re.sub('http://echo.mpiwg-berlin.mpg.de','',path) # falls echo
1.164 dwinter 724:
1.236 ! dwinter 725: path=re.sub('http://vision.rz-berlin.mpg.de','',path) # falls vision als server
1.164 dwinter 726:
1.236 ! dwinter 727: return ECHO_helpers.urlopen("http://nausikaa2.rz-berlin.mpg.de:86/cgi-bin/toc/admin/reg.cgi?path=%s"%path).readlines()
1.164 dwinter 728:
1.123 dwinter 729:
1.236 ! dwinter 730: if RESPONSE is not None:
! 731: RESPONSE.redirect('manage_main')
1.123 dwinter 732:
1.98 dwinter 733:
1.189 dwinter 734:
1.236 ! dwinter 735: security.declarePublic('content_html')
1.29 dwinter 736: def content_html(self):
737: """template fuer content"""
1.189 dwinter 738: return ECHO_basis.content_html(self,'resource')
1.29 dwinter 739:
1.202 casties 740: # def getViewClassification(self):
741: # if hasattr(self,'viewClassification'):
742: # return self.viewClassification
743: # else:
744: # return ""
1.83 dwinter 745:
746: def getFullTextXML(self,noredirect=None):
1.236 ! dwinter 747: """getFullTextXML; gives the FullText as an XML Document, and <error></error> if somthing goes wrong."""
1.180 dwinter 748:
1.236 ! dwinter 749: try:
! 750: #zLOG.LOG("ECHO Fulltext",zLOG.INFO,"open %s"%self.metalink)
! 751: fh=ECHO_helpers.urlopen(self.metalink)
! 752: #zLOG.LOG("ECHO Fulltext",zLOG.INFO,"opened %s"%self.metalink)
! 753: dom=xml.dom.minidom.parse(fh)
! 754: texttools=dom.getElementsByTagName('texttool')
! 755: text=texttools[0].getElementsByTagName('text')
! 756: texturl=getText(text[0].childNodes)
1.180 dwinter 757:
1.236 ! dwinter 758: #zLOG.LOG("ECHO Fulltext",zLOG.INFO,"found %s"%texturl)
1.179 dwinter 759: fh.close()
1.236 ! dwinter 760: #zLOG.LOG("ECHO Fulltext",zLOG.INFO,"closed fh")
! 761: #keine url
! 762: if not (texturl.split(":")[0] in ['http','ftp','file']):
! 763: if not noredirect:
! 764: return file(texturl).read()
1.181 dwinter 765: else:
1.236 ! dwinter 766: return texturl
1.180 dwinter 767:
1.236 ! dwinter 768: if not noredirect:
! 769: self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
! 770: zLOG.LOG("ECHO Fulltext",zLOG.INFO,"redirect to:%s"%texturl)
! 771: self.REQUEST.RESPONSE.redirect(texturl)
! 772: else:
! 773: return texturl
! 774: except:
! 775:
! 776: if not noredirect:
! 777: self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
! 778: self.REQUEST.RESPONSE.write("<error>no fulltext available</error>")
! 779: else:
! 780: return "<error>no fulltext available</error>"
1.92 dwinter 781:
1.192 dwinter 782: def getImagePath(self):
1.236 ! dwinter 783: """gibt pfad zum image aus"""
! 784: return self.getImageView(noredirect="yes",onlyPath="yes")
1.192 dwinter 785:
786: def getImageView(self,noredirect=None,onlyPath=None):
1.236 ! dwinter 787: """getImages; give Imageviewr and <error></error> if somthing goes wrong."""
! 788: try:
! 789: fh=ECHO_helpers.urlopen(self.metalink)
! 790: dom=xml.dom.minidom.parse(fh)
! 791: texttools=dom.getElementsByTagName('texttool')
! 792: text=texttools[0].getElementsByTagName('image')
! 793: imagetemp=getText(text[0].childNodes)
! 794:
! 795: text=dom.getElementsByTagName('archive-path')
! 796: archivepath=getText(text[0].childNodes)
! 797: archivepath=re.sub('/mpiwg/online/','',archivepath)
! 798: imageurl="http://echo.mpiwg-berlin.mpg.de/zogilib?fn="+archivepath+"/"+imagetemp
! 799: fh.close()
! 800:
! 801: if not noredirect:
! 802: self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
! 803: self.REQUEST.RESPONSE.redirect(imageurl)
! 804: else:
! 805: if not onlyPath:
! 806: return imageurl
! 807: else:
! 808: return archivepath+"/"+imagetemp
! 809: except:
! 810:
! 811: if not noredirect:
! 812: self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
! 813: self.REQUEST.RESPONSE.write("<error>no fulltext available</error>")
! 814: else:
! 815: return "<error>no images available</error>"
1.147 dwinter 816:
817:
1.104 dwinter 818: def getCopyrightsHTML(self):
1.236 ! dwinter 819: """gib (link auf copyright link, mediatyp, institution, copyrightType, label von copyrightType) aus"""
! 820:
! 821: if hasattr(self,'copyrightModel'):
! 822: obj=self.copyrightModel
! 823:
! 824: else:
! 825: return "ERROR"
! 826: ret=[]
! 827:
! 828: for copyright in obj.getCopyrights(): #copyright - media / partner / copyrightID
! 829:
! 830:
! 831: try:
! 832: if hasattr(self.copyrightTypes,copyright[2]):
! 833: copyrightTypeObj=getattr(self.copyrightTypes,copyright[2])
! 834: link="copyrightTypes/"+copyright[2]+'/copyright.html'
! 835: else:
! 836: copyrightTypeObj=getattr(obj,copyright[2])
! 837: link="copyrightModel/"+copyright[2]+'/copyright.html'
! 838:
! 839: label=copyrightTypeObj.label
! 840: url=getattr(copyrightTypeObj, 'url', '')
! 841:
! 842: if url!='':
! 843: ret.append((url,copyright[0],copyright[1],copyright[2],label))
! 844: else:
! 845: if hasattr(copyrightTypeObj, 'copyright.html'):
! 846: ret.append(("""%s?partner=%s"""%(link,copyright[1]),copyright[0],copyright[1],copyright[2],label))
! 847: else:
! 848: ret.append(('empty',copyright[0],copyright[1],copyright[2],label))
! 849: except:
! 850: """nothing"""
! 851:
! 852: return ret
! 853:
1.157 jdamerow 854: def getInstitutionsHTML(self):
1.236 ! dwinter 855: """gibt Liste der foerdernden Institutionen aus"""
! 856:
! 857: if hasattr(self,'support'):
! 858: obj=self.support
! 859: ret=obj.getSupporter()
! 860: return ret
! 861: else:
! 862: return ''
! 863:
1.83 dwinter 864:
1.9 dwinter 865: def getCredits(self):
866: """Ausgabe der credits"""
867: if self.credits:
868: return self.credits
869: else:
870: return []
1.195 casties 871:
872:
1.6 dwinter 873:
1.94 dwinter 874: def __init__(self,id,link,metalink,resourceID,title,label,description,contentType,renderingType,copyrightType,responsible,credits,weight,coords):
1.1 casties 875:
876: self.id = id
877: """Festlegen der ID"""
878:
879: self.label = label
880: self.link= link
881: self.metalink=metalink
882: self.title=title
883: self.weight=weight
884: self.credits=toList(credits)
885: self.description=description
1.27 dwinter 886: self.contentType=contentType
1.236 ! dwinter 887: self.copyrightType=copyrightType
! 888: self.renderingType=renderingType
1.1 casties 889: self.responsible=responsible
1.90 dwinter 890: self.resourceID=resourceID
1.236 ! dwinter 891:
1.9 dwinter 892: if coords:
893: coordsnew=[ string.split(x,",") for x in coords]
894: else:
895: coordsnew=[]
896:
1.1 casties 897: self.coords=coordsnew
1.236 ! dwinter 898: # self.viewClassification=""
1.1 casties 899:
1.3 dwinter 900:
901:
1.49 dwinter 902: def getContentType(self):
1.236 ! dwinter 903: try:
! 904: return self.contentType
! 905: except:
! 906: return ""
1.1 casties 907:
1.73 dwinter 908: def getCopyrightType(self):
1.236 ! dwinter 909: try:
! 910: return self.copyrightType
! 911: except:
! 912: return ""
1.73 dwinter 913:
914: def getRenderingType(self):
1.236 ! dwinter 915: try:
! 916: return self.renderingType
! 917: except:
! 918: return ""
1.73 dwinter 919:
1.1 casties 920: def ECHO_resource_config(self):
921: """Main configuration"""
922:
923: if not hasattr(self,'weight'):
924: self.weight=""
925:
1.195 casties 926: pt=zptFile(self, 'zpt/ChangeECHO_resource.zpt')
1.1 casties 927: return pt()
928:
929:
1.73 dwinter 930: def ECHO_resource_config_main(self):
931: """Main configuration"""
932: if not hasattr(self,'weight'):
933: self.weight=""
1.195 casties 934: pt=zptFile(self, 'zpt/ChangeECHO_resource_main.zpt')
1.73 dwinter 935: return pt()
936:
937: def ECHO_resource_config_coords(self):
938: """Coords configuration """
1.195 casties 939: pt=zptFile(self, 'zpt/ChangeECHO_resource_coords.zpt')
1.73 dwinter 940: return pt()
941:
942: def ECHO_resource_config_credits(self):
943: """Main configuration"""
1.195 casties 944: pt=zptFile(self, 'zpt/ChangeECHO_resource_credits.zpt')
1.73 dwinter 945: return pt()
946:
947: def ECHO_resource_config_metadata(self):
948: """Main configuration"""
1.236 ! dwinter 949: if (hasattr(self,'metadata')) and not (hasattr(self,'metaDataHash')):
! 950: self.metaDataHash={}
! 951: self.contentType=self.bib_type
! 952: for data in self.metadata:
! 953: data_neu=re.sub('-','_',data)
! 954: self.meta
1.133 dwinter 955: DataHash[data_neu]=getattr(self,data)[0:]
1.91 dwinter 956:
1.236 ! dwinter 957:
1.195 casties 958: pt=zptFile(self, 'zpt/ChangeECHO_resource_metadata.zpt')
1.73 dwinter 959: return pt()
960:
961:
962:
963:
964: def changeECHO_resource_main(self,metalink,link,title,label,description,contentType,renderingType,weight,resourceID,RESPONSE=None):
1.195 casties 965: """Aenderung der Properties"""
1.236 ! dwinter 966: self.resourceID=resourceID
! 967: self.title=title
! 968: self.label=label
! 969: self.description=description
! 970:
! 971: self.contentType=contentType
! 972: self.renderingType=renderingType
! 973: self.weight=weight
! 974:
1.73 dwinter 975: self.link=link
976: self.metalink=metalink
977:
978: if RESPONSE is not None:
979: RESPONSE.redirect('manage_main')
980:
981:
1.195 casties 982: def changeECHO_resource_coords(self,RESPONSE=None):
983: """Aenderung der Properties - coords"""
1.236 ! dwinter 984: #return self.REQUEST
! 985: for area in self.getMapAreas():
! 986: id = area.getId()
! 987: if self.REQUEST.has_key('del.'+id):
! 988: # delete this area
! 989: self._delObject(id)
! 990: # return to same menu
! 991: if RESPONSE is not None:
! 992: RESPONSE.redirect('ECHO_resource_config_coords')
! 993: return
! 994: # modify this area
! 995: coordstring = self.REQUEST.get('coords.'+id, '')
! 996: coords = string.split(coordstring, ',')
! 997: angle = self.REQUEST.get('angle.'+id, '0')
! 998: type = self.REQUEST.get('type.'+id, 'area')
! 999: if len(coords) == 4:
! 1000: area.setCoordString(coordstring)
! 1001: area.setAngle(angle)
! 1002: area.setType(type)
! 1003: # return to main menu
! 1004: if RESPONSE is not None:
! 1005: RESPONSE.redirect('manage_main')
1.73 dwinter 1006:
1007:
1008: def changeECHO_resource_credits(self,credits,responsible,copyrightType,RESPONSE=None):
1.195 casties 1009: """Aenderung der Properties"""
1.236 ! dwinter 1010: self.credits=credits
! 1011: self.responsible=responsible
! 1012: self.copyrightType=copyrightType
1.73 dwinter 1013:
1014: if RESPONSE is not None:
1015: RESPONSE.redirect('manage_main')
1016:
1017:
1.90 dwinter 1018: def changeECHO_resource_metadata_local(self,RESPONSE=None):
1.236 ! dwinter 1019: """change metadata"""
! 1020: tags=self.findTagsFromMapping(self.contentType)
! 1021: for field in tags[1]:
! 1022: self.metaDataHash[self.getFieldTag(tags,field)]=self.REQUEST.form[self.getFieldTag(tags,field)][0:]
! 1023:
! 1024:
! 1025:
! 1026: if RESPONSE is not None:
! 1027: RESPONSE.redirect('manage_main')
1.90 dwinter 1028:
1.73 dwinter 1029: def changeECHO_resource_metadata(self,RESPONSE=None):
1.236 ! dwinter 1030: """change metadata"""
! 1031: tags=self.findTagsFromMapping(self.contentType)
! 1032: self.OSAS_meta={}
! 1033: for field in tags[1]:
! 1034: try:
! 1035: self.metaDataHash[self.getFieldTag(tags,field)]=self.REQUEST.form[self.getFieldTag(tags,field)]
! 1036: self.OSAS_meta[self.getFieldTag(tags,field)]=self.REQUEST.form['OSAS_%s'%self.getFieldTag(tags,field)]
! 1037: except:
! 1038: """nothing"""
1.73 dwinter 1039:
1.236 ! dwinter 1040: ECHO_helpers.urlopen('http://xserve02.mpiwg-berlin.mpg.de:18880/echo_nav/storage/downloadExternalXML?index_meta_url=%s&xml_url=%s'%(self.metalink,self.absolute_url()+'/newMetaXML')).read()
1.123 dwinter 1041:
1042:
1.236 ! dwinter 1043: if RESPONSE is not None:
! 1044: RESPONSE.redirect('manage_main')
1.73 dwinter 1045:
1046:
1.191 dwinter 1047: def getMDValue(self,fieldName,empty=None):
1.236 ! dwinter 1048: if not empty:
! 1049: return self.metaDataHash.get(fieldName,'!!NOT USED HERE in Type: %s'%self.contentType)
! 1050:
! 1051: else:
! 1052: return self.metaDataHash.get(fieldName,empty)
! 1053:
1.154 dwinter 1054: def newMetaXML(self,project=None,startpage=None,xslt=None,thumbtemplate=None,topbar=None,digiLibTemplate=None,digiliburlprefix=None):
1.236 ! dwinter 1055: """new index.meta"""
! 1056: self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
1.73 dwinter 1057:
1.236 ! dwinter 1058: if not hasattr(self,'metaDataHash'):
! 1059:
! 1060: self.copyIndex_meta2echo_resource()
! 1061: try:
! 1062: return writeMetadata(self.metalink,self.OSAS_meta,project,startpage,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix=digiliburlprefix)
! 1063: except:
! 1064: return writeMetadata(self.metalink,self.metaDataHash,project,startpage,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix=digiliburlprefix)
1.90 dwinter 1065:
1.149 dwinter 1066: def showMetaDataXML(self,project=None,startpage=None,xslt=None,thumbtemplate=None,topbar=None,digiLibTemplate=None):
1.236 ! dwinter 1067: """return bibliographical metadata as stored in the object"""
! 1068:
! 1069: try:
! 1070:
! 1071: return writeMetadata(self.metalink,self.metaDataHash,project,startpage,xslt,thumbtemplate,topbar,digiLibTemplate,xmlfrag="yes")
! 1072: except:
! 1073: return "<error> no metadata stored</error>"
! 1074:
! 1075: def getXQueryMetaData(self,xquery):
! 1076: '''
! 1077: execute an xquery on the metadata and returns a list of tuples,
! 1078: each tuple represent the content of the node as text and the whole node as xml-fragment
! 1079: @param xquery: xquery auf den metadaten
! 1080: '''
! 1081:
! 1082: try:
! 1083: md=writeMetadata(self.metalink,self.metaDataHash,xmlfrag="yes")
! 1084: except:
! 1085: return None
! 1086:
! 1087: dom = NonvalidatingReader.parseString(md,"http://www.mpiwg-berlin.mpg.de/")
! 1088:
! 1089: results=Ft.Xml.XPath.Evaluate(xquery, contextNode=dom)
! 1090:
! 1091: ret=[]
! 1092: for result in results:
! 1093:
! 1094: buf = cStringIO.StringIO()
! 1095: PrettyPrint(result, stream=buf)
! 1096: str = buf.getvalue()[0:]
! 1097: buf.close()
! 1098: ret.append((getTextFromNode(result),str))
! 1099:
! 1100: return ret
! 1101:
1.123 dwinter 1102: def getMetaDataXML(self,project=None,startpage=None,xslt=None,thumbtemplate=None,topbar=None,digiLibTemplate=None):
1.236 ! dwinter 1103: """prints out metadata as stored in the echo environment, format is the index.meta format"""
! 1104: self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
! 1105: return writeMetadata(self.metalink,self.metaDataHash)
1.90 dwinter 1106:
1.202 casties 1107: def changeECHO_resource(self,metalink,link,title,label,description,contentType,responsible,weight,coords=None,credits=None,RESPONSE=None):
1.195 casties 1108: """Aenderung der Properties"""
1.1 casties 1109:
1.198 casties 1110: setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight)
1.1 casties 1111: self.link=link
1112: self.metalink=metalink
1113:
1114: if RESPONSE is not None:
1115: RESPONSE.redirect('manage_main')
1116:
1117:
1118: manage_options = Folder.manage_options+(
1.73 dwinter 1119: {'label':'Main Config','action':'ECHO_resource_config_main'},
1.236 ! dwinter 1120: {'label':'Change Metadata','action':'ECHO_resource_config_metadata'},
! 1121: {'label':'Graphic Coords','action':'ECHO_graphicEntry'},
1.73 dwinter 1122: {'label':'Sync Metadata','action':'ECHO_getResourceMD'},
1.236 ! dwinter 1123: {'label':'Change TemplateSets and Image Viewer','action':'changeViewerTemplateSetForm'},
! 1124: {'label':'set/change startpage','action':'setStartPageForm'},
! 1125: {'label':'Copy MD for indexing and search','action':'copySearchFields'},
! 1126: )
1.1 casties 1127:
1.73 dwinter 1128:
1129: def isDefinedInThisSet(self,fields,field):
1.236 ! dwinter 1130: """checks if field is defined in fields"""
! 1131: if (fields[0].has_key(field)) and not (fields[0][field]==""):
! 1132: return 1
! 1133: else:
! 1134:
! 1135: return 0
! 1136:
1.73 dwinter 1137: def getFieldLabel(self,fields,field):
1138: """get labels"""
1139: try:
1140: ret =fields[0][field]
1141: if ret == "":
1142: return field
1143: else:
1144: return ret
1145: except:
1146: return field
1147:
1148:
1149:
1150: def getFieldTag(self,fields,field):
1151: """get labels"""
1152: try:
1153: ret =fields[0][field]
1154: if ret == "":
1155: return field
1156: else:
1157: return ret
1158: except:
1159: return field
1160:
1161:
1162:
1163: def getFieldValue(self,field):
1164: """get value"""
1.236 ! dwinter 1165:
1.73 dwinter 1166: try:
1.236 ! dwinter 1167:
1.73 dwinter 1168: ret=self.metaDataHash[field]
1169: if ret == "":
1170: return None
1171: else:
1.236 ! dwinter 1172:
! 1173: return ret
1.73 dwinter 1174: except:
1175: return None
1176:
1.90 dwinter 1177: def getMetaDataHash(self):
1.236 ! dwinter 1178: """md hash"""
! 1179: return self.metaDataHash
1.90 dwinter 1180:
1181: def setFieldValue(self,field,value):
1182: """get value"""
1.236 ! dwinter 1183:
! 1184: if not hasattr(self,'metaDataHash'):
! 1185: setattr(self,'metaDataHash',{})
! 1186: self.metaDataHash[field]=value[0:]
! 1187:
1.90 dwinter 1188:
1.130 dwinter 1189: def copySearchFields(self):
1.236 ! dwinter 1190: """copys metadatafields to the object"""
! 1191: fields=['author','title','year']
! 1192: for field in fields:
! 1193: setattr(self,'MD_'+field,self.getFieldValue(field))
1.130 dwinter 1194:
1.90 dwinter 1195:
1.73 dwinter 1196: def findLabelsFromMapping(self,referenceType):
1197: """gib hash mit label -> generic zurueck"""
1.236 ! dwinter 1198: #return {},[]
1.90 dwinter 1199:
1200: temp=self.ZopeFind(self.standardMD)
1201:
1.236 ! dwinter 1202: if referenceType=="":
! 1203: referenceType="book"
! 1204:
! 1205:
1.73 dwinter 1206: bibdata={}
1207: retdata={}
1.236 ! dwinter 1208: fields=[]
1.73 dwinter 1209: fieldlist=self.standardMD.fieldList
1.204 dwinter 1210:
1211: tags=self.findTagsFromMapping(self.contentType)
1.236 ! dwinter 1212: self.referencetypes=tags[2]
! 1213: for referenceTypeF in self.referencetypes:
1.91 dwinter 1214:
1.236 ! dwinter 1215: if referenceTypeF[1].title.lower() == referenceType.lower():
1.91 dwinter 1216:
1.236 ! dwinter 1217: try:
! 1218: bibdata[referenceTypeF[1].title]=referenceTypeF[1].fields
! 1219: referenceType=referenceTypeF[1].title
! 1220: except:
! 1221: bibdata[referenceType]=referenceTypeF[1].fields
! 1222:
1.86 dwinter 1223:
1.236 ! dwinter 1224: bibdata['data']=referenceTypeF[1]
! 1225: fields=bibdata[referenceType]
1.73 dwinter 1226: for field in fieldlist:
1227: retdata[field]=referenceTypeF[1].getValue(field)[1]
1.91 dwinter 1228:
1.90 dwinter 1229: return retdata,fieldlist,temp,fields
1.73 dwinter 1230:
1231: def findTagsFromMapping(self,referenceType):
1232: """gib hash mit label -> generic zurueck"""
1.236 ! dwinter 1233:
1.90 dwinter 1234:
1.236 ! dwinter 1235: if referenceType=="":
! 1236: referenceType="book"
! 1237:
! 1238: temp = self.ZopeFind(self.standardMD)[0:]
1.90 dwinter 1239:
1.236 ! dwinter 1240:
! 1241: #self.referencetypes=temp[0:]
! 1242:
! 1243:
! 1244:
! 1245:
! 1246:
1.90 dwinter 1247:
1.73 dwinter 1248: bibdata={}
1249: retdata={}
1250: fieldlist=self.standardMD.fieldList
1.130 dwinter 1251: fields=[]
1.236 ! dwinter 1252: for referenceTypeF in temp:
! 1253: #print referenceType
! 1254:
! 1255: if referenceTypeF[1].title.lower() == referenceType.lower():
! 1256: try:
! 1257: bibdata[referenceTypeF[1].title]=referenceTypeF[1].fields
! 1258: referenceType=referenceTypeF[1].title
! 1259: except:
! 1260: bibdata[referenceType]=referenceTypeF[1].fields
! 1261: bibdata['data']=referenceTypeF[1]
! 1262: fields=bibdata[referenceType]
1.73 dwinter 1263: for field in fieldlist:
1264: retdata[field]=referenceTypeF[1].getValue(field)[0]
1.236 ! dwinter 1265:
1.90 dwinter 1266: return retdata,fieldlist,temp,fields
1.73 dwinter 1267:
1268:
1.123 dwinter 1269: security.declarePublic('copyIndex_meta2echo_resource') # has to be change, presentlyset because of OSAS koordination
1.90 dwinter 1270: def copyIndex_meta2echo_resource(self,RESPONSE=None):
1.236 ! dwinter 1271: """copy MD von Index_meta to the echo_resource"""
! 1272:
! 1273: (metadict, error)=readMetadata(self.metalink)
! 1274:
! 1275:
! 1276:
! 1277: self.metaDataHash={}
! 1278: if not error=="": #Fehler beim Auslesen des Metafiles
! 1279:
! 1280: return "ERROR:",error,self.absolute_url()
! 1281:
! 1282: self.contentType=metadict['bib_type'][0:]
! 1283: fields=self.findTagsFromMapping(self.contentType)
! 1284:
! 1285: #fields=self.findLabelsFromMapping(self.contentType)
! 1286: for field in fields[1]:
! 1287:
! 1288: if self.isDefinedInThisSet(fields,field):
! 1289: #print urllib.unquote(metadict.get(self.getFieldTag(fields,field),''))
! 1290: self.setFieldValue(self.getFieldTag(fields,field),metadict.get(self.getFieldTag(fields,field),''))
! 1291:
! 1292:
! 1293:
! 1294: if RESPONSE:
! 1295: return RESPONSE.redirect('manage_main')
! 1296:
1.133 dwinter 1297: def ECHO_getResourceMD(self,template="yes",back=None):
1.1 casties 1298: """Einlesen der Metadaten und Anlegen dieser Metadaten als Informationen zur Resource"""
1299: (metadict, error)=readMetadata(self.metalink)
1300:
1.133 dwinter 1301: if back:
1302: self.REQUEST.SESSION['back']=back
1.1 casties 1303:
1304: if not error=="": #Fehler beim Auslesen des Metafiles
1.236 ! dwinter 1305: return "ERROR:",error
! 1306:
! 1307: if not self.contentType:
! 1308: self.contentType=metadict['bib_type'].lower()
! 1309:
! 1310: if not (metadict['bib_type'].lower()==self.contentType.lower()):
! 1311: self.REQUEST.SESSION['contentStorage']=metadict['bib_type']
! 1312: self.REQUEST.SESSION['contentZope']=self.contentType
! 1313:
! 1314: return zptFile(self, 'zpt/ECHO_getResourceMDErrorContentType.zpt')()
! 1315:
! 1316: self.REQUEST.SESSION['metadict']=metadict
! 1317:
! 1318:
! 1319:
! 1320: self.REQUEST.SESSION['diffs']=checkDiffs(self,self.REQUEST.SESSION['metadict'])
! 1321:
1.13 dwinter 1322:
1.236 ! dwinter 1323:
1.1 casties 1324: if template=="yes":
1.236 ! dwinter 1325: pt=zptFile(self, 'zpt/ECHO_resourceMD.zpt')
! 1326: return pt()
1.73 dwinter 1327:
1.236 ! dwinter 1328:
1.73 dwinter 1329:
1330:
1.1 casties 1331:
1332: def ECHO_getMD(self,item):
1333: """Ausgabe der MD"""
1334: return getattr(self,item)
1.191 dwinter 1335:
1336: def checkRDF(self,path):
1.236 ! dwinter 1337: """check if pdf in the path"""
! 1338: try:
! 1339: for fileName in os.listdir(path):
! 1340: if os.path.splitext(fileName)[1]==".pdf":
! 1341: return os.path.join(path,fileName)
! 1342: return None
! 1343: except:
! 1344: return None
! 1345:
! 1346:
1.224 casties 1347: security.declareProtected('View','index_html')
1.1 casties 1348: def index_html(self):
1349: """standard page"""
1.191 dwinter 1350: pdf=self.checkRDF(self.link)
1.236 ! dwinter 1351: if pdf:
! 1352: fh=file(pdf,'r').read()
! 1353: self.REQUEST.RESPONSE.setHeader('Content-Type','application/pdf')
! 1354: self.REQUEST.RESPONSE.write(fh)
! 1355: self.REQUEST.RESPONSE.close()
! 1356: return
1.1 casties 1357: return self.REQUEST.RESPONSE.redirect(self.link)
1358:
1.90 dwinter 1359: def startpage_html(self):
1.236 ! dwinter 1360: """prints out a startpage for a resource for use e.g. in the BVE"""
1.90 dwinter 1361:
1.236 ! dwinter 1362: # suche ob startpage.html in dem Ordner vorhanden ist, dann wir diese angezeigt
1.90 dwinter 1363:
1.236 ! dwinter 1364: sp=self.ZopeFind(self,obj_ids=['startpage.html'])
1.90 dwinter 1365:
1.236 ! dwinter 1366: if sp:
! 1367: return sp[1]()
1.90 dwinter 1368:
1.195 casties 1369: #pruefen ob irgendwo ein template
1.236 ! dwinter 1370: if hasattr(self,'startpage_index_template'):
! 1371: return self.startpage_index_template()
1.90 dwinter 1372:
1.236 ! dwinter 1373: #generisches template ausgeben
! 1374:
! 1375: pt=zptFile(self, 'zpt/ECHO_startpage_index_template_standard.zpt')
! 1376: pt.content_type="text/html"
! 1377: return pt()
1.90 dwinter 1378:
1379: def toc_html(self):
1.236 ! dwinter 1380:
! 1381: sp=self.ZopeFind(self,obj_ids=['toc.html'])
! 1382:
! 1383: if sp:
! 1384: return sp[0][1]()
1.90 dwinter 1385:
1386:
1.123 dwinter 1387: security.declarePublic('generate_label') # has to be change, presentlyset because of OSAS koordination
1.133 dwinter 1388:
1.1 casties 1389: def generate_label(self):
1390: """Erzeugt_standard_Label aus Template"""
1.123 dwinter 1391: pt=getattr(self,"label_template_"+self.contentType.lower())
1.13 dwinter 1392:
1.236 ! dwinter 1393: self.label=pt()[0:]
1.1 casties 1394: return pt()
1395:
1.123 dwinter 1396: security.declarePublic('generate_title') # has to be change, presentlyset because of OSAS koordination
1.133 dwinter 1397:
1.90 dwinter 1398: def generate_title(self,RESPONSE=None):
1399: """Erzeugt_standard_Label aus Template"""
1.123 dwinter 1400: pt=getattr(self,"label_template_"+self.contentType.lower())
1.90 dwinter 1401:
1.236 ! dwinter 1402: self.title=pt()[0:]
! 1403:
1.90 dwinter 1404: return pt()
1405:
1.123 dwinter 1406: Globals.InitializeClass(ECHO_resource)
1407:
1.13 dwinter 1408: def manage_addECHO_resourceForm(self):
1409: """Form for adding a ressource"""
1.195 casties 1410: pt=zptFile(self, 'zpt/AddECHO_resourceForm.zpt')
1.1 casties 1411: return pt()
1412:
1413:
1.10 dwinter 1414:
1.207 dwinter 1415: def manage_addECHO_resource(self,id,title,label,description="",responsible="",link="",metalink="",weight="",copyrightType=None,resourceID=None,contentType=None,renderingType=None,credits=None,coords=None,RESPONSE=None):
1.224 casties 1416: """addresource"""
1.1 casties 1417:
1.94 dwinter 1418: newObj=ECHO_resource(id,link,metalink,resourceID,title,label,description,contentType,renderingType,copyrightType,responsible,credits,weight,coords)
1.1 casties 1419:
1420: self._setObject(id,newObj)
1.13 dwinter 1421:
1.1 casties 1422: if RESPONSE is not None:
1423: RESPONSE.redirect('manage_main')
1424:
1425:
1.189 dwinter 1426: class ECHO_externalLink(Folder,ECHO_basis):
1.1 casties 1427: """Link zu einer externen Ressource"""
1428: security=ClassSecurityInfo()
1429: meta_type='ECHO_externalLink'
1430:
1.210 dwinter 1431: security.declarePublic('content_html')
1.29 dwinter 1432: def content_html(self):
1433: """template fuer content"""
1.189 dwinter 1434: return ECHO_basis.content_html(self,'externalLink')
1.29 dwinter 1435:
1.27 dwinter 1436: def __init__(self,id,link,title,label,description,contentType,responsible,credits,weight,coords):
1.1 casties 1437:
1438: self.id = id
1439: """Festlegen der ID"""
1440:
1441: self.credits=toList(credits)
1442: self.label = label
1443: self.link= link
1444: self.title=title
1445: self.weight=weight
1446: self.description=description
1.27 dwinter 1447: self.contentType=contentType
1.1 casties 1448: self.responsible=responsible
1449: coordsnew=[ string.split(x,",") for x in coords]
1450: self.coords=coordsnew
1451:
1452: def ECHO_externalLink_config(self):
1453: """Main configuration"""
1454:
1455: if not hasattr(self,'weight'):
1456: self.weight=""
1457: if not hasattr(self,'coords'):
1.9 dwinter 1458:
1.1 casties 1459: self.coords=['']
1.91 dwinter 1460:
1.1 casties 1461:
1.195 casties 1462: pt=zptFile(self, 'zpt/ChangeECHO_externalLink.zpt')
1.1 casties 1463: return pt()
1464:
1465:
1.37 dwinter 1466: def changeECHO_externalLink(self,link,title,label,description,contentType,responsible,weight,coords=None,credits=None,RESPONSE=None):
1.195 casties 1467: """Aenderung der Properties"""
1.198 casties 1468: setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight)
1.1 casties 1469:
1470: self.link=link
1471: if RESPONSE is not None:
1472: RESPONSE.redirect('manage_main')
1473:
1474:
1475: manage_options = Folder.manage_options+(
1476: {'label':'Main Config','action':'ECHO_externalLink_config'},
1.236 ! dwinter 1477: {'label':'Graphic Coords','action':'ECHO_graphicEntry'},
1.1 casties 1478: )
1.17 dwinter 1479:
1480:
1.1 casties 1481: def index_html(self):
1482: """standard page"""
1483:
1484: return self.REQUEST.RESPONSE.redirect(self.link)
1485:
1.13 dwinter 1486: def manage_addECHO_externalLinkForm(self):
1487: """Form for external Links"""
1.195 casties 1488: pt=zptFile(self, 'zpt/AddECHO_externalLinkForm.zpt')
1.1 casties 1489: return pt()
1490:
1491:
1.27 dwinter 1492: def manage_addECHO_externalLink(self,id,title,label,description,contentType,responsible,link,weight,coords=None,credits=None,RESPONSE=None):
1.13 dwinter 1493: """Add an external Link"""
1.1 casties 1494:
1.27 dwinter 1495: newObj=ECHO_externalLink(id,link,title,label,description,contentType,responsible,credits,weight,coords)
1.1 casties 1496:
1497: self._setObject(id,newObj)
1.13 dwinter 1498:
1.1 casties 1499: if RESPONSE is not None:
1500: RESPONSE.redirect('manage_main')
1501:
1.24 dwinter 1502:
1.51 dwinter 1503: class ECHO_link(ECHO_externalLink):
1.236 ! dwinter 1504: """external_link"""
! 1505:
! 1506: meta_type="ECHO_link"
! 1507:
! 1508:
! 1509: def content_html(self):
! 1510: """template fuer link"""
! 1511: if hasattr(self,"link_template"):
! 1512: return ECHO_basis.content_html(self,'link')
! 1513: else:
! 1514: return ECHO_basis.content_html(self,'collection')
1.51 dwinter 1515:
1.236 ! dwinter 1516: def index_html(self):
! 1517: """standard link"""
! 1518: if self.link:
! 1519: splitted=self.link.split("?")
! 1520: if len(splitted)>1:
! 1521: params=cgi.parse_qs(splitted[1])
! 1522:
! 1523: for x in params.keys():
! 1524: if type(params[x]) is ListType:
! 1525: params[x]=params[x][0]
1.210 dwinter 1526:
1.236 ! dwinter 1527:
! 1528: else:
! 1529: params={}
! 1530:
! 1531: params['backLink']=self.aq_parent.absolute_url()
! 1532: params['startLink']=splitted[0]+"?"+urllib.urlencode(params)
! 1533:
! 1534:
! 1535: return self.REQUEST.RESPONSE.redirect(splitted[0]+"?"+urllib.urlencode(params))
! 1536: else:
! 1537: return ""
1.225 dwinter 1538:
1.51 dwinter 1539: def manage_addECHO_linkForm(self):
1540: """Form for external Links"""
1.195 casties 1541: pt=zptFile(self, 'zpt/AddECHO_linkForm.zpt')
1.51 dwinter 1542: return pt()
1543:
1544:
1.216 dwinter 1545: def manage_addECHO_link(self,id,title,label,description="",contentType="",responsible="",link="",weight="",coords=[],credits=None,RESPONSE=None):
1.51 dwinter 1546: """Add an external Link"""
1547:
1548: newObj=ECHO_link(id,link,title,label,description,contentType,responsible,credits,weight,coords)
1549:
1550: self._setObject(id,newObj)
1551:
1552: if RESPONSE is not None:
1553: RESPONSE.redirect('manage_main')
1.236 ! dwinter 1554:
1.24 dwinter 1555:
1.189 dwinter 1556: class ECHO_collection(Folder, Persistent, Implicit, Cacheable,ECHO_basis):
1.1 casties 1557: """ECHO Collection"""
1.84 dwinter 1558:
1.1 casties 1559: security=ClassSecurityInfo()
1560: meta_type='ECHO_collection'
1.202 casties 1561: # viewClassificationList=viewClassificationListMaster
1.69 dwinter 1562: displayTypes=displayTypes
1563:
1.130 dwinter 1564: path="/mpiwg/online/permanent/shipbuilding"
1.132 dwinter 1565:
1.228 dwinter 1566: def localizeObjects(self):
1.236 ! dwinter 1567: """localize all objects"""
! 1568: contents=self.ZopeFind(self,obj_metatypes=['ECHO_externalLink','ECHO_link','ECHO_mapText'])
1.233 dwinter 1569:
1.236 ! dwinter 1570: find=self.ZopeFind(self,obj_ids=('locale_en'))
! 1571: if not find:
! 1572: self.manage_addECHO_locale("en",'','')
! 1573: for content in contents:
! 1574:
! 1575: if content[1].meta_type in ['ECHO_link','ECHO_externalLink']:
! 1576:
! 1577: find=content[1].ZopeFind(content[1],obj_metatypes=('ECHO_mapText'))
! 1578: if find:
! 1579: root=find[0][1]
! 1580:
! 1581: locale=find[0][1].ZopeFind(find[0][1],obj_ids=('locale_en'))
! 1582: else:
! 1583: root=None
! 1584: else:
! 1585: root=content[1]
! 1586: locale=content[1].ZopeFind(content[1],obj_ids=('locale_en'))
! 1587: if root and not locale:
! 1588: root.manage_addECHO_locale("en",'','')
! 1589:
! 1590: pt=zptFile(self, 'zpt/localizeObjects.zpt')
! 1591: return pt()
1.228 dwinter 1592:
1593:
1594: def localize(self,REQUEST,RESPONSE):
1.236 ! dwinter 1595: """localize"""
! 1596: for key in REQUEST.form.keys():
! 1597: splitted=key.split("!")
! 1598:
! 1599: if splitted[0]=="" or splitted[0]=="en" or splitted[0]=="title" or splitted[0]=="label":
! 1600: if splitted[0]=="en":
! 1601: setattr(self.locale_en,splitted[1],REQUEST.form[key])
! 1602: else:
! 1603: setattr(self,splitted[0],REQUEST.form[key])
! 1604: else:
! 1605: obj=getattr(self,splitted[0])
! 1606:
! 1607: if obj.meta_type=="ECHO_mapText":
! 1608: if splitted[1]=="en":
! 1609: obj.locale_en.pt_edit(REQUEST.form[key],None)
! 1610: else:
! 1611: obj.pt_edit(REQUEST.form[key],None)
! 1612: else:
! 1613: text=obj.ZopeFind(obj,obj_metatypes=['ECHO_mapText'])
! 1614: if splitted[1]=="en":
! 1615:
! 1616: text[0][1].locale_en.pt_edit(REQUEST.form[key],None)
! 1617: else:
! 1618: text[0][1].pt_edit(REQUEST.form[key],None)
! 1619: if RESPONSE is not None:
! 1620: RESPONSE.redirect('manage_main')
1.228 dwinter 1621:
1622:
1.142 dwinter 1623: def getRDF(self,urn=None):
1.236 ! dwinter 1624: """rdf of the collection"""
! 1625:
! 1626: contents=self.ZopeFind(self,obj_metatypes=['ECHO_group','ECHO_resource','ECHO_collection'])
! 1627:
! 1628: ret=getRDFDescription(self,self.absolute_url(),urn=urn)
! 1629:
! 1630: if not urn:
! 1631: urn=self.absolute_url()
! 1632:
! 1633: li="""<RDF:li RDF:resource="%s" />\n"""
! 1634:
! 1635:
! 1636: for content in contents:
! 1637: ret+=content[1].getRDF()+"\n"
! 1638:
! 1639: ret+="""<RDF:Seq RDF:about="%s">\n"""%urn
! 1640: for content in contents:
! 1641: nurn=content[1].absolute_url()
! 1642: ret+=li%nurn
! 1643: return ret+"</RDF:Seq>"
! 1644:
1.161 dwinter 1645:
1646:
1.133 dwinter 1647: def changeLabels(self):
1.236 ! dwinter 1648: """change form"""
! 1649: pt=zptFile(self, 'zpt/changeLabelsForm')
! 1650: pt.content_type="text/html"
! 1651: return pt()
1.133 dwinter 1652:
1653: def changeTitles(self):
1.236 ! dwinter 1654: """change form"""
! 1655: pt=zptFile(self, 'zpt/changeTitleForm')
! 1656: pt.content_type="text/html"
! 1657: return pt()
1.163 dwinter 1658:
1659: def changeWeights(self):
1.236 ! dwinter 1660: """change form"""
! 1661: pt=zptFile(self, 'zpt/changeWeightForm')
! 1662: pt.content_type="text/html"
! 1663: return pt()
1.163 dwinter 1664:
1.161 dwinter 1665: def changeMetaDataLinks(self):
1.236 ! dwinter 1666: """change form"""
! 1667: pt=zptFile(self, 'zpt/changeMetaDataLinkForm')
! 1668: pt.content_type="text/html"
! 1669: return pt()
1.132 dwinter 1670: def changeAccessRightsCollection(self):
1.236 ! dwinter 1671: """change"""
! 1672: ret=""
! 1673: argv=self.REQUEST.form
! 1674:
! 1675: resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'])
! 1676: for resource in resources:
! 1677:
! 1678: try:
! 1679: ret+=resource[1].getId()+" "+argv[resource[1].getId()]+"</br>"
! 1680: resource[1].changeAccessRightMD(argv[resource[1].getId()])
! 1681: except:
! 1682: pass
! 1683: return ret
1.161 dwinter 1684:
1685: def changeMetaDataLinkInCollection(self):
1.236 ! dwinter 1686: """change all lables of a collection"""
! 1687: ret=""
! 1688: argv=self.REQUEST.form
! 1689:
! 1690: resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'])
! 1691: for resource in resources:
! 1692:
! 1693: try:
! 1694: ret+=resource[1].getId()+" "+argv[resource[1].getId()]+"</br>"
1.161 dwinter 1695: resource[1].metalink=argv[resource[1].getId()][0:]
1.236 ! dwinter 1696: except:
! 1697: pass
! 1698: return ret
1.132 dwinter 1699:
1.163 dwinter 1700: def changeMetaDataLinkInCollection(self):
1.236 ! dwinter 1701: """change all lables of a collection"""
! 1702: ret=""
! 1703: argv=self.REQUEST.form
! 1704:
! 1705: resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'])
! 1706: for resource in resources:
! 1707:
! 1708: try:
! 1709: ret+=resource[1].getId()+" "+argv[resource[1].getId()]+"</br>"
1.163 dwinter 1710: resource[1].metalink=argv[resource[1].getId()][0:]
1.236 ! dwinter 1711: except:
! 1712: pass
! 1713: return ret
1.163 dwinter 1714:
1715: def changeWeightsInCollection(self):
1.236 ! dwinter 1716: """change all lables of a collection"""
! 1717: ret=""
! 1718: argv=self.REQUEST.form
! 1719:
! 1720: resources=self.ZopeFind(self,obj_metatypes=['ECHO_pageTemplate','ECHO_movie','ECHO_resource','ECHO_collection','ECHO_link','ECHO_externalLink'])
! 1721: for resource in resources:
! 1722:
! 1723: try:
! 1724: ret+=resource[1].getId()+" "+argv[resource[1].getId()]+"</br>"
1.163 dwinter 1725: resource[1].weight=argv[resource[1].getId()][0:]
1.236 ! dwinter 1726: except:
! 1727: pass
! 1728: return ret
1.133 dwinter 1729:
1730: def changeTitlesInCollection(self):
1.236 ! dwinter 1731: """change all lables of a collection"""
! 1732: ret=""
! 1733: argv=self.REQUEST.form
! 1734:
! 1735: resources=self.ZopeFind(self,obj_metatypes=['ECHO_pageTemplate','ECHO_movie','ECHO_resource','ECHO_collection','ECHO_link','ECHO_externalLink'])
! 1736: for resource in resources:
! 1737:
! 1738: try:
! 1739: ret+=resource[1].getId()+" "+argv[resource[1].getId()]+"</br>"
1.133 dwinter 1740: resource[1].title=argv[resource[1].getId()][0:]
1.236 ! dwinter 1741: except:
! 1742: pass
! 1743: return ret
1.219 dwinter 1744:
1745: def changeLabelsInCollection(self):
1.236 ! dwinter 1746: """change all lables of a collection"""
! 1747: ret=""
! 1748: argv=self.REQUEST.form
! 1749:
! 1750: resources=self.ZopeFind(self,obj_metatypes=['ECHO_pageTemplate','ECHO_movie','ECHO_resource','ECHO_collection','ECHO_link','ECHO_externalLink'])
! 1751: for resource in resources:
! 1752:
! 1753: try:
! 1754: ret+=resource[1].getId()+" "+argv[resource[1].getId()]+"</br>"
1.219 dwinter 1755: resource[1].label=argv[resource[1].getId()][0:]
1.236 ! dwinter 1756: except:
! 1757: pass
! 1758: return ret
1.219 dwinter 1759:
1.130 dwinter 1760: def updateCollection(self,RESPONSE=None):
1761: """liest verzeichnisse aus dem pfad und legt sie dann als objekte in den ordner"""
1762: files=os.listdir(self.path)
1.236 ! dwinter 1763: ret=""
1.130 dwinter 1764: for fileName in files:
1765:
1766: if fileName:
1.236 ! dwinter 1767:
! 1768: tempPath=re.sub("/mpiwg/online","",self.path)
! 1769: link="http://echo.mpiwg-berlin.mpg.de/zogilib_book?fn="+tempPath+"/"+fileName+"/pageimg"
! 1770:
! 1771: metalink=self.path+"/"+fileName+"/index.meta"
1.130 dwinter 1772: try:
1773:
1.236 ! dwinter 1774: #link="http://nausikaa2.mpiwg-berlin.mpg.de/cgi-bin/toc/toc.x.cgi?dir="+fileName+"&step=thumb"
! 1775:
! 1776: newObj=ECHO_resource(fileName,link,metalink,fileName,fileName,fileName,'generated','book','','','','','','')
! 1777: self._setObject(fileName,newObj)
1.130 dwinter 1778:
1.236 ! dwinter 1779: genObj=getattr(self,fileName)
1.130 dwinter 1780: #genObj.createIndexFile()
1.236 ! dwinter 1781: ret+="OK:"+fileName+"<br/>"
! 1782: except:
! 1783: print "ERROR"
! 1784: ret+="ERROR:"+fileName+"<br/>"
1.130 dwinter 1785:
1.236 ! dwinter 1786: return ret
1.130 dwinter 1787:
1788: if RESPONSE is not None:
1789: RESPONSE.redirect('manage_main')
1790:
1791: def updateCollectionMD(self,RESPONSE=None):
1792: """updateMD"""
1793: files=os.listdir(self.path)
1794: for fileName in files:
1795: if fileName:
1796: genObj=getattr(self,fileName)
1797: genObj.copyIndex_meta2echo_resource()
1798: genObj.generate_title()
1799:
1800: if RESPONSE is not None:
1801: RESPONSE.redirect('manage_main')
1802:
1803:
1.123 dwinter 1804:
1805: def changeViewerTemplateSetsForm(self):
1.236 ! dwinter 1806: """change the viewer template set"""
! 1807: pt=zptFile(self, 'zpt/changeViewerTemplateSet')
1.123 dwinter 1808: return pt()
1809:
1.172 dwinter 1810: def getViewerTemplateSets(self,obj_ids=None,RESPONSE=None):
1.236 ! dwinter 1811: """Get the ViewerTemplateSet title for configuration"""
! 1812: ret=[]
! 1813:
! 1814: try:
! 1815: viewerTemplateSets=self.ZopeFind(self.viewerTemplateSets,obj_metatypes=['OSAS_viewerTemplateSet'],obj_ids=obj_ids)#assumes viewerTemplateSets folder somewhere in the hierarchie.
! 1816:
! 1817: for viewerTemplateSet in viewerTemplateSets:
! 1818: ret.append((viewerTemplateSet[1].title,viewerTemplateSet[0],viewerTemplateSet[1]))
! 1819:
! 1820: return ret
! 1821:
! 1822: except:
! 1823: return [('no ViewerTemplateSetfolders','')]
1.123 dwinter 1824:
1825: def getTextToolsField(self,name,default=''):
1.236 ! dwinter 1826: """Lese viewerTemplateSet der Collection not implemented yet!"""
! 1827:
! 1828: return default
1.123 dwinter 1829:
1830:
1831: def isSelectedViewerTemplateSet(self,obj,id):
1.195 casties 1832: """is ausgewaehlt"""
1.123 dwinter 1833:
1834: if self.REQUEST['viewerTemplateSet']==id:
1835: return 1
1836: else:
1837: return None
1838:
1.155 dwinter 1839: def changeViewerTemplateSets(self,project,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix,RESPONSE=None):
1.236 ! dwinter 1840: """change the templates"""
1.123 dwinter 1841:
1.236 ! dwinter 1842: resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1)
1.123 dwinter 1843:
1.236 ! dwinter 1844: for resource in resources:
1.130 dwinter 1845:
1.236 ! dwinter 1846: resource[1].changeViewerTemplateSet(project,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix)
1.123 dwinter 1847:
1.236 ! dwinter 1848: if RESPONSE is not None:
! 1849: RESPONSE.redirect('manage_main')
1.123 dwinter 1850:
1851:
1.153 dwinter 1852: def setStartpageFolderForm(self):
1.236 ! dwinter 1853: """Form for changing the startpage"""
1.153 dwinter 1854:
1.236 ! dwinter 1855:
! 1856: pt=zptFile(self, 'zpt/ChangeECHO_resourceStartPageFolder.zpt')
1.153 dwinter 1857: pt.content_type="text/html"
1858: return pt()
1859:
1860: def setStartpageFolder(self,startpage=None,RESPONSE=None):
1.236 ! dwinter 1861: """change the templates"""
1.153 dwinter 1862:
1.236 ! dwinter 1863: resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1)
1.153 dwinter 1864:
1.236 ! dwinter 1865: for resource in resources:
1.153 dwinter 1866:
1.236 ! dwinter 1867: resource[1].setStartPage(startpage)
1.153 dwinter 1868:
1.236 ! dwinter 1869: if RESPONSE is not None:
! 1870: RESPONSE.redirect('manage_main')
1.153 dwinter 1871:
1.183 dwinter 1872: def copyTitleToInfoXMLFolder(self,RESPONSE=None):
1.236 ! dwinter 1873: """copy title into the title field of info.xml
! 1874: author and date werden leer!!!
! 1875: """
! 1876:
! 1877:
! 1878: resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1)
! 1879:
! 1880:
! 1881: for resource in resources:
! 1882: ret,txt=resource[1].copyTitleToInfoXML()
! 1883: if (not ret) and RESPONSE:
! 1884: RESPONSE.write("error: %s\n"%txt)
! 1885: if ret and RESPONSE:
! 1886: RESPONSE.write("ok: %s\n"%txt)
! 1887:
! 1888: #zLOG.LOG("ECHO (copyTitleToInfoXMLFolder)",zLOG.INFO,txt)
! 1889: if RESPONSE is not None:
! 1890: RESPONSE.write("done!\n")
! 1891: RESPONSE.close()
! 1892: RESPONSE.redirect('manage_main')
! 1893:
1.130 dwinter 1894: def copySearchFields(self,RESPONSE=None):
1.236 ! dwinter 1895: """copys import metadatafields to the object"""
! 1896: resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'])
1.130 dwinter 1897:
1.236 ! dwinter 1898: for resource in resources:
1.130 dwinter 1899:
1.236 ! dwinter 1900: resource[1].copySearchFields()
1.130 dwinter 1901:
1.236 ! dwinter 1902: if RESPONSE is not None:
! 1903: RESPONSE.redirect('manage_main')
! 1904:
1.153 dwinter 1905: def reloadMetaDataFromStorageWarning(self,RESPONSE=None):
1.236 ! dwinter 1906: """warning"""
! 1907: pt=zptFile(self, 'zpt/reloadMetaDataFromStorageWarning.zpt')
1.153 dwinter 1908: pt.content_type="text/html"
1909: return pt()
1.130 dwinter 1910:
1911: def reloadMetaDataFromStorage(self,RESPONSE=None):
1.236 ! dwinter 1912: """copy metadata from the storage to ECHO"""
1.130 dwinter 1913:
1.236 ! dwinter 1914: return reloadMetaDataFromStorage(self,RESPONSE=None)
1.130 dwinter 1915:
1.153 dwinter 1916:
1.98 dwinter 1917: def getPartnerCopyright(self,name,sonst="generic"):
1.236 ! dwinter 1918: """gibt generisches copyright eines partners aus, sonst behalte jetzige einsteillung"""
! 1919: #print "hi",name,sonst
! 1920: #print getattr(self.partners,name).copyrightType
! 1921: try:
! 1922: partner=getattr(self.partners,name)
! 1923: return partner.copyrightType
! 1924: except:
! 1925: print "error"
! 1926: return sonst
1.98 dwinter 1927:
1928: def partnerSelector_HTML(self,selected=None):
1929: """give type selector"""
1.236 ! dwinter 1930: if not selected:
! 1931: retStr="<option selected>\n"
! 1932: else:
! 1933: retStr="<option>\n"
! 1934:
! 1935: try: # erste version copyrightTypes exists
! 1936: for partner in self.credits:
! 1937: if selected and (partner==selected):
! 1938: retStr+="""<option selected value="%s">%s\n"""%(partner,partner)
! 1939: else:
! 1940: retStr+="""<option value="%s">%s\n"""%(partner,partner)
! 1941: except:
! 1942: """nothing"""
! 1943: return retStr
1.98 dwinter 1944:
1.202 casties 1945: # def getViewClassification(self):
1946: # if hasattr(self,'viewClassification'):
1947: # return self.viewClassification
1948: # else:
1949: # return ""
1.48 dwinter 1950:
1.236 ! dwinter 1951:
1.45 dwinter 1952: def createRessourcesFromXMLForm(self):
1.236 ! dwinter 1953: """form"""
! 1954: pt=zptFile(self, 'zpt/createRessourcesFromXMLForm.zpt')
! 1955: return pt()
1.83 dwinter 1956:
1.45 dwinter 1957: def createRessourcesFromXML(self,fileupload):
1.236 ! dwinter 1958: """read an XML file for generating resources"""
! 1959: dom=xml.dom.minidom.parse(fileupload)
! 1960: ret="<h2>Added</h2>"
! 1961: for resource in dom.getElementsByTagName('resource'):
! 1962: link=getText(resource.getElementsByTagName('link')[0].childNodes)
! 1963: label=getText(resource.getElementsByTagName('label')[0].childNodes)
! 1964: #splitted=link.split("?")[0].split("/")
! 1965: #id=splitted[len(splitted)-1].encode('ascii')
! 1966: id=re.sub(" ","_",label).encode('ascii')
! 1967:
! 1968: ret+="<p>"+label+"</p>"
! 1969: manage_addECHO_resource(self,id,label.encode('ascii'),label.encode('ascii'),"","","",link.encode('ascii'),"","")
! 1970: return ret
1.210 dwinter 1971:
1972: security.declarePublic('getImageTag')
1.25 dwinter 1973: def getImageTag(self):
1974: """GetTag"""
1975: try:
1976: return self.imageTag
1977: except:
1978: return ""
1979:
1.217 dwinter 1980:
1.222 dwinter 1981: def addMovie(self,id,title,label,description,contentType,responsible,link,thumbUrl,rawFile,lowresFile,metalink,weight,credits=None,coords=None,RESPONSE=None):
1.217 dwinter 1982: """SSS"""
1.228 dwinter 1983:
1.236 ! dwinter 1984: #manage_addECHO_movie(self,id,title,label,description,responsible,link,thumbUrl,rawFile,metalink,weight,credits=None,coords=None,RESPONSE=None)
! 1985: if not hasattr(self,id):
! 1986: try:
! 1987: manage_addECHO_movie(self,id,title,label,description,responsible,link,thumbUrl,rawFile,lowresFile,metalink,weight,credits=None,coords=None,RESPONSE=None)
! 1988: return "done"
! 1989: except:
! 1990: return None
! 1991: else:
! 1992: obj=getattr(self,id)
! 1993: obj.changeECHO_movie_main(metalink,link,rawFile,lowresFile,thumbUrl,title,label,description,contentType,weight=weight)
1.220 dwinter 1994:
1.236 ! dwinter 1995: return "changed"
1.220 dwinter 1996:
1.27 dwinter 1997: def addResource(self,id,title,label,description,contentType,responsible,link,metalink,weight,credits=None,coords=None,RESPONSE=None):
1.24 dwinter 1998: """SSS"""
1999: try:
1.123 dwinter 2000: manage_addECHO_resource(self,id,title,label,description,responsible,link,metalink,weight,credits=None,coords=None,RESPONSE=None)
1.24 dwinter 2001: return "done"
2002: except:
2003: return None
1.32 dwinter 2004:
2005: def getSecondaryLink(self):
2006: """secondary link"""
2007: try:
2008: return self.secondaryLink
2009: except:
2010: return ""
2011:
2012: def getSecondaryLinkTitle(self):
2013: """secondary link"""
2014: try:
2015: return self.secondaryLinkTitle
2016: except:
2017: return ""
2018:
1.205 dwinter 2019: def getCollectionTreeXML(self,pwstr=None):
1.24 dwinter 2020: """Tree as XML"""
2021:
1.236 ! dwinter 2022: def addPassWd(str,pwstr=None):
! 2023: """adds a user/passwd to an url"""
! 2024: if pwstr:
! 2025: txt2=re.sub(r"(http://)(.*?)","\g<1>%s@\g<2>"%pwstr,str)
! 2026: else:
! 2027: txt2=re.sub(r"(http://)(.*?)","\g<1>www:3333@\g<2>",str)
! 2028: return txt2
1.171 dwinter 2029:
1.205 dwinter 2030: def getCollection(object,depth=0,pwstr=None):
1.24 dwinter 2031: depth+=1
2032: collections=""
2033: for entry in object.__dict__.keys():
2034: element=getattr(object,entry)
2035: try:
1.40 dwinter 2036: if element.meta_type in ["ECHO_collection","ECHO_group"]:
1.205 dwinter 2037: collections+="<element name=\""+urllib.quote(element.title)+"\" url=\""+addPassWd(element.absolute_url(),pwstr=pwstr)+"\">"
1.24 dwinter 2038: collections+=getCollection(element,depth)+"</element>\n"
2039: except:
2040: """nothing"""
2041: return collections
2042:
1.236 ! dwinter 2043: ret="""<?xml version="1.0" encoding="utf-8" ?>"""
1.205 dwinter 2044: return ret+"<collection>"+getCollection(self,pwstr=pwstr)+"</collection>"
1.24 dwinter 2045:
1.195 casties 2046: def createAllJSAreas(self):
2047: """create area calls for JavaScript"""
2048: areas = self.getAllMapAreas()
1.236 ! dwinter 2049: return self.createJSAreas(areas)
1.195 casties 2050:
1.1 casties 2051: security.declarePublic('getCreditObject')
2052: def getCreditObject(self,name):
2053: """credit id to credititem"""
1.15 dwinter 2054: try:
2055: return getattr(self.partners,name)
2056: except:
2057: return ""
1.17 dwinter 2058:
1.1 casties 2059: security.declarePublic('ECHO_generateNavBar')
2060: def ECHO_generateNavBar(self):
2061: """Erzeuge Navigationsbar"""
2062: link=""
2063: object="self"
2064: ret=[]
2065: path=self.getPhysicalPath()
2066: for element in path:
2067:
2068:
2069: if not element=="":
2070: object+="."+element
2071:
2072: label=eval(object).label
2073: link+="/"+element
2074: if not label=="":
2075: ret.append((label,link))
2076: return ret
2077:
1.49 dwinter 2078:
1.153 dwinter 2079: def ECHO_rerenderLinksMDWarning(self):
1.236 ! dwinter 2080: """change form"""
! 2081: pt=zptFile(self, 'zpt/rerenderLinksWarning')
! 2082: pt.content_type="text/html"
! 2083: return pt()
1.91 dwinter 2084:
1.49 dwinter 2085:
1.153 dwinter 2086:
1.195 casties 2087: security.declarePublic('ECHO_rerenderLinksMD')
1.153 dwinter 2088: def ECHO_rerenderLinksMD(self,obj=None,types=['title','label']):
2089: """Rerender all Links"""
1.236 ! dwinter 2090: return ECHO_rerenderLinksMD(self,obj,types)
1.19 dwinter 2091:
1.236 ! dwinter 2092:
1.216 dwinter 2093: def __init__(self,id,title,label,description="",contentType="",responsible="",credits="",weight="",sortfield="",coords=[],secondaryLinkTitle="",secondaryLink="",imageTag="",bgcolour=""):
1.91 dwinter 2094:
1.1 casties 2095: self.id = id
2096: """Festlegen der ID"""
2097: self.credits=toList(credits)
2098: self.label = label
2099: self.title=title
2100: self.description=description
1.27 dwinter 2101: self.contentType=contentType
1.1 casties 2102: self.responsible=responsible
1.25 dwinter 2103: self.imageTag=imageTag
1.1 casties 2104: self.weight=weight
2105: self.sortfield=sortfield
2106: coordsnew=[ string.split(x,",") for x in coords]
2107: self.coords=coordsnew
1.32 dwinter 2108: self.secondaryLinkTitle=secondaryLinkTitle
2109: self.secondaryLink=secondaryLink
1.236 ! dwinter 2110: self.bgcolour=bgcolour
1.32 dwinter 2111:
1.1 casties 2112:
1.154 dwinter 2113: manage_options = Folder.manage_options+ Cacheable.manage_options+(
1.13 dwinter 2114: {'label':'Main Config','action':'ECHO_collection_config'},
1.133 dwinter 2115: {'label':'Change Labels','action':'changeLabels'},
2116: {'label':'Change Titles','action':'changeTitles'},
1.236 ! dwinter 2117: {'label':'Localize','action':'localizeObjects'},
! 2118: {'label':'Change Weights','action':'changeWeights'},
1.153 dwinter 2119: {'label':'Rerender Labels and Titles','action':'ECHO_rerenderLinksMDWarning'},
1.199 casties 2120: {'label':'Graphic Coords','action':'ECHO_graphicEntry'},
1.236 ! dwinter 2121: {'label':'create resources from XML','action':'createRessourcesFromXMLForm'},
! 2122: {'label':'Set Startpage','action':'setStartpageFolderForm'},
1.155 dwinter 2123: {'label':'Change Viewer Templates and Image Viewer','action':'changeViewerTemplateSetsForm'},
1.236 ! dwinter 2124: {'label':'Reload Metadata','action':'reloadMetaDataFromStorageWarning'},
! 2125: {'label':'ImportCollection','action':'updateCollection'},
! 2126: {'label':'Copy MD for indexing and search','action':'copySearchFields'},
1.1 casties 2127: )
2128:
2129:
1.13 dwinter 2130: security.declarePublic('ECHO_collection_config')
2131: def ECHO_collection_config(self):
1.1 casties 2132: """Main configuration"""
2133:
2134: if not hasattr(self,'weight'):
2135: self.weight=""
2136:
2137: if not hasattr(self,'sortfield'):
2138: self.sortfield="weight"
1.13 dwinter 2139:
1.195 casties 2140: pt=zptFile(self, 'zpt/ChangeECHO_collection.zpt')
1.1 casties 2141: return pt()
2142:
2143:
1.34 dwinter 2144: def getBgcolour(self):
1.236 ! dwinter 2145: """colour"""
! 2146: if hasattr(self,'bgcolour') and not (self.bgcolour==""):
! 2147: return self.bgcolour
! 2148: else:
! 2149: return "#dddddd"
1.195 casties 2150:
1.236 ! dwinter 2151:
! 2152: security.declarePublic('changeECHO_collection')
1.231 dwinter 2153: 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=""):
1.71 casties 2154: """Aenderung der Properties"""
1.10 dwinter 2155:
1.32 dwinter 2156: self.secondaryLink=secondaryLink
2157: self.secondaryLinkTitle=secondaryLinkTitle
1.25 dwinter 2158: self.imageTag=imageTag
1.236 ! dwinter 2159: self.bgcolour=bgcolour
1.105 dwinter 2160: self.location=location
1.236 ! dwinter 2161: self.isAlwaysClickable=isAlwaysClickable
! 2162: self.prefix=prefix[0:]
! 2163: self.suffix=suffix[0:]
! 2164:
1.198 casties 2165: setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight)
1.236 ! dwinter 2166:
1.1 casties 2167: self.sortfield=sortfield
2168:
2169: if RESPONSE is not None:
2170: RESPONSE.redirect('manage_main')
2171:
1.169 dwinter 2172: def setAlwaysClickable(self,flag="yes"):
1.236 ! dwinter 2173: """set clickable"""
! 2174: if flag=="yes":
! 2175: self.isAlwaysClickable="yes"
! 2176: else:
! 2177: self.isAlwaysClickable=None
1.23 dwinter 2178:
1.236 ! dwinter 2179: return flag
1.169 dwinter 2180:
1.23 dwinter 2181: def showOverview(self):
2182: """overview"""
2183: if 'ECHO_overview.html' in self.__dict__.keys():
2184: return getattr(self,'ECHO_overview.html')()
1.195 casties 2185: pt=zptFile(self, 'zpt/ECHO_content_overview.zpt')
1.23 dwinter 2186: return pt()
2187:
1.224 casties 2188:
1.84 dwinter 2189: security.declareProtected('View','index_html')
1.1 casties 2190: def index_html(self):
2191: """standard page"""
1.154 dwinter 2192: if self.ZCacheable_isCachingEnabled():
2193:
2194: result = self.ZCacheable_get()
2195: if result is not None:
2196: # Got a cached value.
2197: return result
1.236 ! dwinter 2198:
1.1 casties 2199: if 'index.html' in self.__dict__.keys():
1.154 dwinter 2200: ret=getattr(self,'index.html')()
1.32 dwinter 2201:
1.1 casties 2202: elif 'overview' in self.__dict__.keys():
1.154 dwinter 2203: ret=self.showOverview()
1.32 dwinter 2204: elif hasattr(self,'collection_index_template'):
1.154 dwinter 2205: ret=self.collection_index_template()
1.54 dwinter 2206: elif hasattr(self,'main_index_template'):
1.209 dwinter 2207:
2208: ret=self.main_index_template.__of__(self)(self.main_template)
1.154 dwinter 2209: else:
1.236 ! dwinter 2210: pt=zptFile(self, 'zpt/ECHO_main_index_template_standard.zpt')
! 2211: pt.content_type="text/html"
! 2212: ret=pt.render()
1.154 dwinter 2213:
1.236 ! dwinter 2214: self.ZCacheable_set(ret)
1.154 dwinter 2215: return ret
1.1 casties 2216:
1.210 dwinter 2217: security.declarePublic('content_html')
1.189 dwinter 2218: def content_html(self,**argv):
1.29 dwinter 2219: """template fuer content"""
1.236 ! dwinter 2220: #print "NN",argv
1.189 dwinter 2221: return ECHO_basis.content_html(self,'collection')
1.29 dwinter 2222:
1.11 dwinter 2223: def getCredits(self):
2224: """Ausgabe der credits"""
2225: if self.credits:
2226: return self.credits
2227: else:
2228: return []
1.1 casties 2229:
1.65 casties 2230: def area_img(self):
2231: """area image"""
1.236 ! dwinter 2232: bt = BrowserCheck(self)
! 2233: if bt.isIE or bt.isN4:
! 2234: return sendFile(self, 'images/red.gif', 'image/gif')
! 2235: else:
! 2236: return sendFile(self, 'images/reda.png', 'image/png')
1.87 casties 2237:
2238: def trans_img(self):
2239: """empty image"""
2240: return sendFile(self, 'images/trans.gif', 'image/gif')
1.65 casties 2241:
2242: def hl_lib_js(self):
2243: """javascript"""
1.79 casties 2244: return sendFile(self, 'js/hl_lib.js', 'text/plain')
1.65 casties 2245:
2246: def js_lib_js(self):
1.195 casties 2247: """javascript -- old name"""
2248: return sendFile(self, 'js/baselib.js', 'text/plain')
2249:
2250: def baselib_js(self):
2251: """javascript"""
2252: return sendFile(self, 'js/baselib.js', 'text/plain')
2253:
2254: def hl_add_js(self):
1.65 casties 2255: """javascript"""
1.195 casties 2256: return sendFile(self, 'js/hl_add.js', 'text/plain')
1.23 dwinter 2257:
1.226 dwinter 2258: def getAllMapAreas(self,mapColTypes=['ECHO_collection','ECHO_resource','ECHO_link','ECHO_externalLink']):
1.1 casties 2259: """Give list of coordinates"""
1.226 dwinter 2260:
1.195 casties 2261: areas=[]
1.211 dwinter 2262: for entry in self.getSubCols(subColTypes=mapColTypes):
1.202 casties 2263: object=entry
1.236 ! dwinter 2264: areas.extend(object.getMapAreas())
1.195 casties 2265: return areas
1.1 casties 2266:
1.42 dwinter 2267:
1.195 casties 2268: def deleteMapAreas(self):
1.236 ! dwinter 2269: """deletes all map areas from this object"""
! 2270: for obs in self.ZopeFind(self, obj_metatypes=['MapArea'], search_sub=1):
! 2271: ob = obs[1]
! 2272: id = ob.id
! 2273: parent = ob.aq_parent
! 2274: print "deleting: ", ob.id
! 2275: parent._delObject(id)
! 2276: return "Done"
1.195 casties 2277:
1.42 dwinter 2278:
1.41 dwinter 2279: getSubCols = ECHO_helpers.getSubCols
1.84 dwinter 2280:
2281: Globals.InitializeClass(ECHO_collection)
1.1 casties 2282:
1.13 dwinter 2283: def manage_addECHO_collectionForm(self):
2284: """Add collection form"""
1.195 casties 2285: pt=zptFile(self, 'zpt/AddECHO_collectionForm.zpt')
1.1 casties 2286: return pt()
2287:
2288:
1.207 dwinter 2289: def manage_addECHO_collection(self,id,title,label,description="",contentType="",responsible="",weight=0,sortfield="weight",coords="",secondaryLinkTitle="",secondaryLink="",credits=None,RESPONSE=None,imageTag="",bgcolour=""):
1.13 dwinter 2290: """add a echo collection"""
1.1 casties 2291:
2292:
1.34 dwinter 2293: newObj=ECHO_collection(id,title,label,description,contentType,responsible,credits,weight,sortfield,coords,secondaryLinkTitle=secondaryLinkTitle,secondaryLink=secondaryLink,imageTag=imageTag,bgcolour="")
1.1 casties 2294:
2295: self._setObject(id,newObj)
1.13 dwinter 2296:
1.1 casties 2297: if RESPONSE is not None:
2298: RESPONSE.redirect('manage_main')
2299:
1.38 dwinter 2300: class ECHO_group(ECHO_collection):
1.236 ! dwinter 2301: """ECHO Gruppe"""
! 2302: security=ClassSecurityInfo()
! 2303: meta_type="ECHO_group"
! 2304:
! 2305: manage_options = Folder.manage_options+(
! 2306: {'label':'Main Config','action':'ECHO_group_config'},
! 2307: {'label':'Rerender Links','action':'ECHO_rerenderLinksMDWarning'},
! 2308: {'label':'Graphic Coords','action':'ECHO_graphicEntry'},
! 2309: )
! 2310:
! 2311: security.declareProtected('View','index_html')
! 2312:
! 2313:
! 2314: def getRDF(self,urn=None):
! 2315: """rdf of the collection"""
! 2316: contents=self.ZopeFind(self,obj_metatypes=['ECHO_group','ECHO_resource','ECHO_collection'])
! 2317:
! 2318: ret=getRDFDescription(self,self.absolute_url(),urn=urn)
! 2319:
! 2320:
! 2321: if not urn:
! 2322: urn=self.absolute_url()
! 2323: li="""<RDF:li RDF:resource="%s" />\n"""
! 2324:
! 2325:
! 2326: for content in contents:
! 2327: ret+=content[1].getRDF()+"\n"
! 2328:
! 2329: ret+="""<RDF:Seq RDF:about="%s">\n"""%urn
! 2330: for content in contents:
! 2331: nurn=content[1].absolute_url()
! 2332: ret+=li%nurn
! 2333: return ret+"</RDF:Seq>"
! 2334:
! 2335: def index_html(self):
! 2336: """standard page"""
! 2337: displayedObjects=self.ZopeFind(self,obj_metatypes=displayTypes)
! 2338: #if (len(displayedObjects)==1) and (displayedObjects[0][1].meta_type=="ECHO_collection"): # nur ein Object dann redirect auf dieses Object
! 2339: # return self.REQUEST.RESPONSE.redirect(displayedObjects[0][1].absolute_url())
! 2340:
! 2341: if 'index.html' in self.__dict__.keys():
! 2342: return getattr(self,'index.html')()
! 2343:
! 2344: elif 'overview' in self.__dict__.keys():
! 2345: return self.showOverview()
! 2346: elif hasattr(self,'group_index_template'):
! 2347: return self.group_index_template()
! 2348: elif hasattr(self,'collection_index_template'):
! 2349: return self.collection_index_template()
! 2350: elif hasattr(self,'main_index_template'):
! 2351: return self.main_index_template()
! 2352:
! 2353: pt=zptFile(self, 'zpt/ECHO_main_index_template_standard.zpt')
! 2354: pt.content_type="text/html"
! 2355: return pt()
! 2356:
! 2357: def ECHO_group_config(self):
! 2358: """Main configuration"""
! 2359:
! 2360: if not hasattr(self,'weight'):
! 2361: self.weight=""
! 2362:
! 2363: if not hasattr(self,'sortfield'):
! 2364: self.sortfield="weight"
! 2365:
! 2366: if not hasattr(self,'coords'):
! 2367: self.coords=[]
! 2368:
! 2369: pt=zptFile(self, 'zpt/ChangeECHO_group.zpt')
! 2370: return pt()
! 2371:
! 2372: def changeECHO_group(self,title,label,description,contentType,responsible,weight,secondaryLink,secondaryLinkTitle,credits=None,sortfield="weight",coords=None,RESPONSE=None,imageTag="",bgcolour="",logo=""):
! 2373: """Aenderung der Properties"""
! 2374:
! 2375: self.secondaryLink=secondaryLink
! 2376: self.secondaryLinkTitle=secondaryLinkTitle
! 2377: self.imageTag=imageTag
! 2378: self.bgcolour=bgcolour
1.43 dwinter 2379: self.logo=logo
2380:
1.236 ! dwinter 2381: setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight)
1.38 dwinter 2382:
2383:
2384:
1.236 ! dwinter 2385: self.sortfield=sortfield
1.38 dwinter 2386:
1.236 ! dwinter 2387: if RESPONSE is not None:
! 2388: RESPONSE.redirect('manage_main')
1.40 dwinter 2389:
1.236 ! dwinter 2390: def getLogo(self):
! 2391: """logo ausgeben"""
1.43 dwinter 2392: try:
2393: return self.logo
2394: except:
2395: return "ECHO_groups"
1.40 dwinter 2396:
1.210 dwinter 2397: security.declarePublic('content_html')
1.236 ! dwinter 2398: def content_html(self):
! 2399: """template fuer content"""
! 2400: return ECHO_basis.content_html(self,'group')
1.38 dwinter 2401:
2402:
2403:
2404: def manage_addECHO_groupForm(self):
2405: """Add group form"""
1.195 casties 2406: pt=zptFile(self, 'zpt/AddECHO_groupForm.zpt')
1.38 dwinter 2407: return pt()
2408:
2409:
1.43 dwinter 2410: def manage_addECHO_group(self,id,title,label,description,contentType,responsible,weight,sortfield,coords="",secondaryLinkTitle="",secondaryLink="",credits=None,RESPONSE=None,imageTag="",bgcolour="",logo=""):
1.38 dwinter 2411: """add a echo group"""
2412:
2413:
2414: newObj=ECHO_group(id,title,label,description,contentType,responsible,credits,weight,sortfield,coords,secondaryLinkTitle=secondaryLinkTitle,secondaryLink=secondaryLink,imageTag=imageTag,bgcolour="")
2415:
1.43 dwinter 2416: setattr(newObj,'logo',logo)
1.38 dwinter 2417: self._setObject(id,newObj)
1.43 dwinter 2418:
1.38 dwinter 2419: if RESPONSE is not None:
2420: RESPONSE.redirect('manage_main')
2421:
1.84 dwinter 2422: Globals.InitializeClass(ECHO_group)
1.85 dwinter 2423:
2424:
2425: class ECHO_userFolder(UserFolder):
1.236 ! dwinter 2426: """User folder for Intranet"""
! 2427: _domain_auth_mode=1 # Identification via domain
! 2428: meta_type="ECHO_userFolder"
! 2429:
! 2430: def authenticate(self, name, password, request):
! 2431: emergency = self._emergency_user
! 2432: if name is None:
! 2433: return None
! 2434: if emergency and name==emergency.getUserName():
! 2435: user = emergency
! 2436: else:
! 2437: user = self.getUser(name)
! 2438: if user is not None and user.authenticate(password, request):
! 2439: return user
! 2440: else:
! 2441: return None
! 2442:
! 2443: def domainSpecMatch(self,spec, request):
! 2444: host=''
! 2445: addr=''
! 2446:
! 2447: # Fast exit for the match-all case
! 2448: if len(spec) == 1 and spec[0] == '*':
! 2449: return 1
! 2450:
! 2451: if request.has_key('REMOTE_HOST'):
! 2452: host=request['REMOTE_HOST']
! 2453:
! 2454: if request.has_key('REMOTE_ADDR'):
! 2455: addr=request['REMOTE_ADDR']
! 2456:
! 2457: if request.has_key('HTTP_X_FORWARDED_FOR'):
! 2458: addr=request['HTTP_X_FORWARDED_FOR']
! 2459:
! 2460:
! 2461: if not host and not addr:
! 2462: return 0
! 2463:
! 2464: if not host:
! 2465: try: host=socket.gethostbyaddr(addr)[0]
! 2466: except: pass
! 2467: if not addr:
! 2468: try: addr=socket.gethostbyname(host)
! 2469: except: pass
! 2470:
! 2471:
! 2472: _host=host.split('.')
! 2473: _addr=addr.split('.')
! 2474: _hlen=len(_host)
! 2475: _alen=len(_addr)
! 2476:
! 2477: for ob in spec:
! 2478: sz=len(ob)
! 2479: _ob=ob.split('.')
! 2480: _sz=len(_ob)
! 2481:
! 2482: mo = addr_match(ob)
! 2483: if mo is not None:
! 2484: if mo.end(0)==sz:
! 2485: fail=0
! 2486: for i in range(_sz):
! 2487: a=_addr[i]
! 2488: o=_ob[i]
! 2489: if (o != a) and (o != '*'):
! 2490: fail=1
! 2491: break
! 2492: if fail:
! 2493: continue
! 2494: return 1
! 2495:
! 2496: mo = host_match(ob)
! 2497: if mo is not None:
! 2498: if mo.end(0)==sz:
! 2499: if _hlen < _sz:
! 2500: continue
! 2501: elif _hlen > _sz:
! 2502: _item=_host[-_sz:]
! 2503: else:
! 2504: _item=_host
! 2505: fail=0
! 2506: for i in range(_sz):
! 2507: h=_item[i]
! 2508: o=_ob[i]
! 2509: if (o != h) and (o != '*'):
! 2510: fail=1
! 2511: break
! 2512: if fail:
! 2513: continue
! 2514: return 1
! 2515: return 0
1.85 dwinter 2516:
2517: Globals.default__class_init__(ECHO_userFolder)
2518:
2519:
2520:
2521: def manage_addECHO_userFolder(self,dtself=None,REQUEST=None,**ignored):
2522: """add a user folder """
2523: f=ECHO_userFolder()
2524: self=self.this()
2525: try: self._setObject('acl_users', f)
2526: except: return MessageDialog(
2527: title ='Item Exists',
2528: message='This object already contains a User Folder',
2529: action ='%s/manage_main' % REQUEST['URL1'])
2530: self.__allow_groups__=f
2531: if REQUEST is not None:
2532: REQUEST['RESPONSE'].redirect(self.absolute_url()+'/manage_main')
2533:
2534: def manage_addECHO_userFolderForm(self):
1.236 ! dwinter 2535: """add a user folder form"""
! 2536: return manage_addECHO_userFolder(self)
1.85 dwinter 2537:
1.165 dwinter 2538:
2539:
1.167 dwinter 2540: def createNode(self,descrs,node):
1.236 ! dwinter 2541: name=descrs[node]['name']
! 2542: type=descrs[node]['type']
! 2543: urn=node
! 2544: #print " will create",node.encode('utf-8')
! 2545: id=re.sub('[^a-zA-Z0-9]','',name).encode('ascii','ignore')
! 2546: #print "id",id
! 2547: #print type
! 2548: #self.REQUEST.RESPONSE.write("<p>%s<p>\n"%id)
! 2549: if type=="CDLI_group":
! 2550:
! 2551: try:
! 2552: manage_addECHO_collection(self,id,name,name,"","","","","")
! 2553:
! 2554: except:
! 2555: self.REQUEST.RESPONSE.write("<p>Error%s</p>\n"%id)
! 2556:
! 2557: self.REQUEST.RESPONSE.write("<p>Creates:%s</p>\n"%getattr(self,id).absolute_url())
! 2558:
! 2559: return type,getattr(self,id),urn
! 2560:
! 2561: if type=="CDLI_item":
! 2562: try:
! 2563: manage_addECHO_resource(self,id,name,name,"","",urn,"","")
! 2564: except:
! 2565: self.REQUEST.RESPONSE.write("<p>Error%s</p>\n"%id)
! 2566: self.REQUEST.RESPONSE.write("<p>Creates:%s</p>\n"%getattr(self,id).absolute_url())
! 2567:
! 2568:
! 2569: return "XX"
1.165 dwinter 2570:
2571:
1.1 casties 2572: class ECHO_root(Folder,Persistent,Implicit):
2573: """ECHO Root Folder"""
1.85 dwinter 2574:
2575: security=ClassSecurityInfo()
2576:
1.1 casties 2577: meta_type="ECHO_root"
1.236 ! dwinter 2578:
! 2579: def findObjectFromFulltext(self,url=None,existUri=None):
! 2580: '''
! 2581:
! 2582: @param url:
! 2583: @param existUri:
! 2584: '''
! 2585: #TODO: at the moment assume that the filename is unique, the whole has to changed to a system of ids.
! 2586: return None
! 2587:
! 2588: def reindex(self,RESPONSE=None):
! 2589: """indiziere alle Objecte neu"""
! 2590:
! 2591: if RESPONSE:
! 2592: RESPONSE.write("<html><body>")
! 2593:
! 2594: resources=self.ZopeFind(self,obj_metatypes=["ECHO_resource"], search_sub=1)
! 2595:
! 2596: for resource in resources:
! 2597: resource[1].reindex()
! 2598: print "<p> done %s </p>\n"
! 2599: if RESPONSE:
! 2600: RESPONSE.write("<p> done %s </p>\n"%resource[0])
! 2601:
! 2602: if RESPONSE:
! 2603: RESPONSE.write("<p> ok </p></html></body>\n")
! 2604:
1.210 dwinter 2605: def printer(self,txt):
2606: print txt
2607: print txt[2]
2608: print txt[2].getImageTag()
2609: print "HO"
2610: return txt[2].getImageTag()
2611:
2612: def printer2(self,txt):
2613: print txt
2614:
2615:
2616: def item2(self,txt):
2617: return txt[2]
1.228 dwinter 2618:
2619: def setLanguage(self,lang):
1.236 ! dwinter 2620: """Set language cookie"""
! 2621: self.REQUEST.RESPONSE.setCookie('lang_exhibition',lang,path="/")
1.228 dwinter 2622:
2623: def switchLanguage(self):
1.236 ! dwinter 2624: """Set language cookie"""
! 2625: if self.getLanguage()=="en":
! 2626: lang="de"
! 2627: else:
! 2628: lang="en"
! 2629:
! 2630: self.REQUEST.RESPONSE.setCookie('lang_exhibition',lang,path="/")
! 2631: self.REQUEST.RESPONSE.redirect(self.REQUEST['URL1'])
1.228 dwinter 2632: def getLanguage(self):
1.236 ! dwinter 2633: """get language cookie"""
! 2634: lang= self.REQUEST.cookies.get('lang_exhibition','de')
! 2635: if lang == '':
! 2636: lang="de"
! 2637: return lang
1.228 dwinter 2638:
1.203 casties 2639: def getContentOverviewTemplate(self):
1.236 ! dwinter 2640: """produces overview template with macro"""
! 2641: pt = zptObjectOrFile(self, 'content_overview_template')
! 2642: return pt
1.165 dwinter 2643:
1.224 casties 2644: def mapstyle_css(self):
2645: """send mapstyle.css"""
2646: sendFile(self, 'html/ECHO_mapstyle.css', 'text/css')
2647:
2648:
1.202 casties 2649: ###Cdli adds -> have to be removed
1.165 dwinter 2650: def getTablet(self,item):
1.167 dwinter 2651: #print "getTablet"
1.236 ! dwinter 2652: try:
! 2653: read=urllib.urlopen("http://enlil.museum.upenn.edu/cgi-bin/cdlget.plx?item=%s&project=ncdl"%item).read()
1.167 dwinter 2654: read=re.sub("\[search\]","search",read)
1.236 ! dwinter 2655: return read[read.find("<body>")+6:read.rfind("</body>")]
! 2656: except:
! 2657: return "<h1>Sorry no connection to the data server enlil.museum.upenn.edu</h1>"
! 2658: #return "http://enlil.museum.upenn.edu/cgi-bin/cdlget.plx?item=%s&project=ncdl"
1.167 dwinter 2659: ###END CDLI add
2660:
1.186 dwinter 2661:
1.200 casties 2662: def URLquote(self, text):
2663: """urllib.quote fuer Michael"""
1.236 ! dwinter 2664: return urllib.quote(text)
1.200 casties 2665:
2666:
1.186 dwinter 2667: def checkResource(self,id):
1.236 ! dwinter 2668: """checks if a resource is in the tree, gives back none or list of resources"""
! 2669: if not id:
! 2670: id=""
! 2671: splitted=id.split("/")
! 2672: id=splitted[len(splitted)-1]
! 2673: if hasattr(self,"_v_checkResource") and self._v_checkResource.has_key(id): #existiert ein cache und id ist bereits drin?
! 2674: return self._v_checkResource[id]
! 2675:
! 2676: else:
! 2677: resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'],obj_ids=[id],search_sub=1)
! 2678:
! 2679: if not hasattr(self,"_v_checkResource"): self._v_checkResource={}#lege cache an falls nicht existent
! 2680: if resources:
! 2681: self._v_checkResource[id]=resources[0:] # slicing to be sure that data is stabil
! 2682: else:
! 2683: self._v_checkResource[id]=None
! 2684:
! 2685: return self._v_checkResource[id]
! 2686:
1.177 dwinter 2687: def sendForm(self,fromaddr,content,server='mail.mpiwg-berlin.mpg.de'):
1.236 ! dwinter 2688: """sendform"""
! 2689: toaddrs=["dwinter@mpiwg-berlin.mpg.de"]
! 2690:
! 2691: msg = ("From: %s\r\nTo: %s\r\nSubject: %s\r\n\r\n"
! 2692: % (fromaddr, ", ".join(toaddrs),"testsub"))
! 2693: server = smtplib.SMTP(server)
! 2694: #server.set_debuglevel(1)
! 2695: msg=msg+content
! 2696: server.sendmail(fromaddr, toaddrs, msg)
! 2697: server.quit()
! 2698:
1.167 dwinter 2699: def generateFromRDFForm(self):
1.236 ! dwinter 2700: """change form"""
! 2701: pt=zptFile(self, 'zpt/generateFromRDFForm')
! 2702: pt.content_type="text/html"
! 2703: return pt()
1.167 dwinter 2704:
2705: def generateFromRDF(self,file,startNode="/Cuneiform Corpus"):
2706:
1.236 ! dwinter 2707: """generate from RDF"""
! 2708:
! 2709: global seqs
! 2710: seqs={}
! 2711: global descrs
! 2712: descrs={}
! 2713: global key
! 2714: key=""
! 2715: global value
! 2716: value=""
! 2717:
! 2718: def getEdges(seqs,urn):
! 2719: """edges"""
! 2720: ret=[]
! 2721: return seqs[urn]
! 2722:
! 2723: def createSubs(self,seqs,descrs,urn,level=0):
! 2724: """create subs"""
! 2725: for edge in getEdges(seqs,urn):
! 2726: cn=createNode(self,descrs,edge)
! 2727: if cn[0]=="CDLI_group":
! 2728: createSubs(cn[1],seqs,descrs,cn[2],level+1)
! 2729: return
! 2730:
! 2731: def start_element(name,attrs):
! 2732:
! 2733: global seqs
! 2734: global descrs
! 2735: global key
! 2736: global value
! 2737: seq=""
! 2738: if name=="RDF:Seq":
! 2739: key=attrs.get('RDF:about')
! 2740: try: # teste ob liste
! 2741: x=seqs[key][0]
! 2742: except:
! 2743:
! 2744: seqs[key]=[]
! 2745:
! 2746:
! 2747: elif name=="RDF:Description":
! 2748: key=attrs.get('RDF:about')
! 2749:
! 2750:
! 2751: elif name=="RDF:li":
! 2752: name=attrs.get('RDF:resource')
! 2753: seqs[key].append(name)
! 2754:
! 2755: elif name=="ECHONAVIGATION:type":
! 2756: value="type"
! 2757:
! 2758: elif name=="ECHONAVIGATION:name":
! 2759: value="name"
! 2760: elif name=="ECHONAVIGATION:linkClickable":
! 2761: value="linkClickable"
! 2762:
! 2763: def end_element(name):
! 2764: """nothing"""
! 2765: key=""
! 2766: value=""
! 2767:
! 2768: def char_data(data):
! 2769: """nothing"""
1.165 dwinter 2770:
1.236 ! dwinter 2771: data=re.sub("\n","",data)
! 2772: try:
! 2773: if descrs[key].has_key(value):
! 2774: descrs[key][value]+=data
! 2775: else:
! 2776: descrs[key][value]=data
! 2777: except:
! 2778:
! 2779: descrs[key]={}
! 2780: descrs[key][value]=data
! 2781:
! 2782: p = xml.parsers.expat.ParserCreate()
! 2783:
! 2784: p.StartElementHandler = start_element
! 2785: p.EndElementHandler = end_element
! 2786: p.CharacterDataHandler = char_data
! 2787:
! 2788:
! 2789: p.ParseFile(file)
! 2790: self.REQUEST.RESPONSE.write("<html><body><h1>Start</h1>")
! 2791: createSubs(self,seqs,descrs,startNode)
! 2792: self.REQUEST.RESPONSE.write("<h1>done</h1></body></html>")
! 2793: #print "done"
1.165 dwinter 2794:
1.236 ! dwinter 2795:
! 2796: return "done"
1.165 dwinter 2797:
1.236 ! dwinter 2798:
1.165 dwinter 2799:
1.236 ! dwinter 2800:
1.163 dwinter 2801: def changeWeightsInCollection(self):
1.236 ! dwinter 2802: """change all lables of a collection"""
! 2803: ret=""
! 2804: argv=self.REQUEST.form
! 2805:
! 2806: resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource','ECHO_collection','ECHO_link','ECHO_externalLink'])
! 2807: for resource in resources:
! 2808:
! 2809: try:
! 2810: ret+=resource[1].getId()+" "+argv[resource[1].getId()]+"</br>"
1.163 dwinter 2811: resource[1].weight=argv[resource[1].getId()][0:]
1.236 ! dwinter 2812: except:
! 2813: pass
! 2814: return ret
1.153 dwinter 2815:
1.163 dwinter 2816: def changeWeights(self):
1.236 ! dwinter 2817: """change form"""
! 2818: pt=zptFile(self, 'zpt/changeWeightForm')
! 2819: pt.content_type="text/html"
! 2820: return pt()
1.163 dwinter 2821: getSubCols = ECHO_helpers.getSubCols
1.153 dwinter 2822:
2823: manage_options=Folder.manage_options+(
1.236 ! dwinter 2824: {'label':'Main Config','action':'ECHO_copyright_configForm'},
! 2825: {'label':'Reload Metadata','action':'reloadMetaDataFromStorageWarning'},
! 2826: {'label':'Change Weights','action':'changeWeights'},
! 2827: {'label':'Generate from RDF','action':'generateFromRDFForm'},
1.167 dwinter 2828:
2829: )
1.153 dwinter 2830:
1.141 dwinter 2831:
1.153 dwinter 2832:
2833: def reloadMetaDataFromStorageWarning(self,RESPONSE=None):
1.236 ! dwinter 2834: """warning"""
! 2835: pt=zptFile(self, 'zpt/reloadMetaDataFromStorageWarning.zpt')
1.153 dwinter 2836: pt.content_type="text/html"
2837: return pt()
2838:
2839: def reloadMetaDataFromStorage(self,RESPONSE=None):
1.236 ! dwinter 2840: """reload MD from Storage"""
1.153 dwinter 2841:
1.236 ! dwinter 2842: return reloadMetaDataFromStorage(self,RESPONSE)
1.153 dwinter 2843:
1.143 dwinter 2844: def getRDF(self,urn=None):
1.236 ! dwinter 2845: """rdf of the collection"""
1.143 dwinter 2846:
1.236 ! dwinter 2847: contents=self.ZopeFind(self,obj_metatypes=['ECHO_group','ECHO_resource','ECHO_collection'])
1.141 dwinter 2848:
1.236 ! dwinter 2849: ret=getRDFDescription(self,self.absolute_url(),urn=urn)
! 2850:
! 2851: li="""<RDF:li RDF:resource="%s" />\n"""
! 2852:
! 2853:
! 2854: for content in contents:
! 2855: ret+=content[1].getRDF()+"\n"
! 2856:
! 2857: ret+="""<RDF:Seq RDF:about="%s">\n"""%urn
! 2858: for content in contents:
! 2859: nurn=content[1].absolute_url()
! 2860: ret+=li%nurn
! 2861: return ret+"</RDF:Seq>"
! 2862:
1.90 dwinter 2863:
1.130 dwinter 2864: def showContent(self,path):
1.236 ! dwinter 2865: """return content/html"""
! 2866:
! 2867: return ECHO_helpers.urlopen(path+"/content_html").read()
1.130 dwinter 2868:
2869: def getImageViewers(self):
2870: """images"""
2871: viewers=self.ZopeFind(self.standardImageViewer,obj_metatypes=['OSAS_ViewerObject'])
2872: return viewers
2873:
1.90 dwinter 2874:
2875: def getBibTag(self,tag,content):
1.236 ! dwinter 2876: """get field tag for index-meta-generation"""
! 2877: if not content or content=="":
! 2878: return ""
! 2879: ret="<%s>"%tag
! 2880: #ret+=urllib.quote(content)
! 2881: ret+=content
1.95 dwinter 2882:
1.236 ! dwinter 2883: ret+="</%s>"%tag
! 2884: return ret
1.90 dwinter 2885:
2886: def getValueFromClass(self,field,found):
1.236 ! dwinter 2887: """retattribute falss existing"""
! 2888: try:
! 2889:
! 2890: return getattr(found,field).decode('ascii','ignore')
! 2891: except:
! 2892: return ""
1.210 dwinter 2893:
2894: security.declarePublic('getImageTag')
1.49 dwinter 2895: def getImageTag(self):
1.236 ! dwinter 2896: """needed by main_template"""
! 2897: return ""
1.210 dwinter 2898:
1.49 dwinter 2899: secondaryLink="" #needed by main_template
2900: secondaryLinkTitle="" #needed by main_template
2901:
1.35 dwinter 2902: def getBgcolour(self):
1.236 ! dwinter 2903: """hack"""
! 2904: return "#dddddd"
1.28 dwinter 2905:
1.217 dwinter 2906: security.declareProtected('View','contentTypeSelector_HTML')
1.28 dwinter 2907: def contentTypeSelector_HTML(self,selected=None):
2908: """give type selector"""
2909: if not selected:
2910: retStr="<option selected>\n"
2911: else:
2912: retStr="<option>\n"
2913:
1.62 dwinter 2914: try: # erste version contentTypes exists
1.73 dwinter 2915: for contentType in self.ZopeFind(self.contentTypes,obj_metatypes=["ECHO_contentType","OSAS_MetadataMapping"]):
1.28 dwinter 2916: if selected and (contentType[0]==selected):
2917: retStr+="""<option selected value="%s">%s\n"""%(contentType[0],contentType[0])
2918: else:
2919: retStr+="""<option value="%s">%s\n"""%(contentType[0],contentType[0])
2920: except:
1.236 ! dwinter 2921: try:
! 2922: for contentType in self.ZopeFind(self.standardMD,obj_metatypes=["OSAS_MetadataMapping"]):
! 2923: if selected and (contentType[0]==selected):
! 2924: retStr+="""<option selected value="%s">%s\n"""%(contentType[0],contentType[0])
! 2925: else:
! 2926: retStr+="""<option value="%s">%s\n"""%(contentType[0],contentType[0])
! 2927: except:
! 2928: """nothing"""
! 2929:
! 2930: return retStr
1.73 dwinter 2931:
2932: def renderingTypeSelector_HTML(self,selected=None):
2933: """give type selector"""
1.236 ! dwinter 2934: if not selected:
! 2935: retStr="<option selected>\n"
! 2936: else:
! 2937: retStr="<option>\n"
! 2938:
! 2939: try: # erste version renderingTypes exists
! 2940: for renderingType in self.ZopeFind(self.renderingTypes,obj_metatypes=["ECHO_renderingType"]):
! 2941: if selected and (renderingType[0]==selected):
! 2942: retStr+="""<option selected value="%s">%s\n"""%(renderingType[0],renderingType[0])
! 2943: else:
! 2944: retStr+="""<option value="%s">%s\n"""%(renderingType[0],renderingType[0])
! 2945: except:
! 2946: """nothing"""
! 2947: return retStr
1.73 dwinter 2948:
2949:
1.151 jdamerow 2950: def copyrightTypeSelector_HTML(self, object=None, selected=None,first=None):
1.73 dwinter 2951: """give type selector"""
1.104 dwinter 2952:
1.236 ! dwinter 2953: if not first:
! 2954: if not selected:
! 2955: retStr="<option selected>\n"
! 2956: else:
! 2957: retStr="<option>\n"
! 2958: else:
! 2959: if not selected:
! 2960: retStr="""<option selected value="%s">%s\n"""%first
! 2961: else:
! 2962: retStr="""<option value="%s">%s\n"""%first
! 2963:
! 2964:
! 2965: try: # erste version copyrightTypes exists
! 2966: for copyrightType in self.ZopeFind(self.copyrightTypes,obj_metatypes=["ECHO_copyrightType"]):
! 2967: if selected and (copyrightType[0]==selected):
! 2968: retStr+="""<option selected value="%s">%s\n"""%(copyrightType[0],copyrightType[0])
! 2969: else:
! 2970: retStr+="""<option value="%s">%s\n"""%(copyrightType[0],copyrightType[0])
! 2971:
! 2972: for copyrightTypeSelf in self.ZopeFind(object,obj_metatypes=["ECHO_copyrightType"],search_sub=1):
! 2973: if selected and (copyrightTypeSelf[0]==selected):
! 2974: retStr+="""<option selected value="%s">%s\n"""%(copyrightTypeSelf[0],copyrightTypeSelf[0])
! 2975: else:
! 2976: retStr+="""<option value="%s">%s\n"""%(copyrightTypeSelf[0],copyrightTypeSelf[0])
! 2977:
! 2978: except:
! 2979: """nothing"""
! 2980:
! 2981: return retStr
1.98 dwinter 2982:
2983: def partnerSelector_HTML(self,selected=None):
2984: """give type selector"""
1.236 ! dwinter 2985: if not selected:
! 2986: retStr="<option selected>\n"
! 2987: else:
! 2988: retStr="<option>\n"
! 2989:
! 2990: try: # erste version copyrightTypes exists
! 2991: for copyrightType in self.ZopeFind(self.partners,obj_metatypes=["ECHO_partner"]):
! 2992: if selected and (copyrightType[0]==selected):
! 2993: retStr+="""<option selected value="%s">%s\n"""%(copyrightType[0],copyrightType[0])
! 2994: else:
! 2995: retStr+="""<option value="%s">%s\n"""%(copyrightType[0],copyrightType[0])
! 2996: except:
! 2997: """nothing"""
! 2998: return retStr
1.98 dwinter 2999:
1.195 casties 3000: mediaTypes=['all','text','images','sound','video'] # konfigurierbar in neuer version ueber echoroot??
1.98 dwinter 3001:
3002: def mediaTypeSelector_HTML(self,selected=None):
3003: """give type selector"""
1.236 ! dwinter 3004: if not selected:
! 3005: retStr="<option selected>\n"
! 3006: else:
! 3007: retStr="<option>\n"
! 3008:
! 3009: try: # erste version mediatypesTypes exists
! 3010: for mediaType in self.mediaTypes:
! 3011: if selected and (mediaType in selected):
! 3012: retStr+="""<option selected value="%s">%s\n"""%(mediaType,mediaType)
! 3013: else:
! 3014: retStr+="""<option value="%s">%s\n"""%(mediaType,mediaType)
! 3015: except:
! 3016: """nothing"""
! 3017: return retStr
1.73 dwinter 3018:
1.28 dwinter 3019:
1.27 dwinter 3020: def patchContentType(self,obj=None):
3021: """austauschen content_type with contentType (patch bei umstieg von alter Version)"""
3022:
3023:
3024: if not obj:
3025: obj = self
3026:
1.30 dwinter 3027: entries=obj.ZopeFind(obj,obj_metatypes=['ECHO_resource','ECHO_collection','ECHO_externalLink','ECHO_pageTemplate'])
1.27 dwinter 3028:
3029: for entry in entries:
1.31 dwinter 3030: setattr(entry[1],'contentType',entry[1].content_type)
3031: #entry[1].contentType == entry[1].content_type
1.27 dwinter 3032:
3033: if entry[1].meta_type == 'ECHO_collection':
3034: entry[1].patchContentType(entry[1])
1.19 dwinter 3035:
1.27 dwinter 3036:
1.49 dwinter 3037: return "changed all contenttypes in: "+self.title
1.63 dwinter 3038:
3039:
1.198 casties 3040: def repairAllCoords(self):
1.236 ! dwinter 3041: """updates map coordinates on the same and sublevels"""
! 3042: return repairCoords(self)
1.198 casties 3043:
3044:
1.63 dwinter 3045: def patchViewClassification(self,obj=None):
3046: """setze viewClassification heuristisch"""
3047:
1.236 ! dwinter 3048: def checkIfArrow(obj):
! 3049: if hasattr(obj,'coords'):
! 3050: for coordtemp in obj.coords:
! 3051:
! 3052: if (len(coordtemp)>4) and not (coordtemp[4]==''):
! 3053: return 4
! 3054: return None
! 3055: return None
! 3056:
1.63 dwinter 3057: if not obj:
3058: obj = self
3059:
3060: entries=obj.ZopeFind(obj,obj_metatypes=['ECHO_resource','ECHO_collection','ECHO_group'])
3061:
3062: for entry in entries:
1.236 ! dwinter 3063:
! 3064: if checkIfArrow(entry[1]):
! 3065: setattr(entry[1],'viewClassification','view point')
! 3066: else:
! 3067: setattr(entry[1],'viewClassification','area')
1.63 dwinter 3068:
3069: #entry[1].contentType == entry[1].content_type
3070:
3071: if entry[1].meta_type in ['ECHO_collection','ECHO_group']:
3072: entry[1].patchViewClassification(entry[1])
3073:
3074:
3075: return "changed all contenttypes in: "+self.title
1.166 dwinter 3076:
1.167 dwinter 3077: def deleteCache(self,obj=None,RESPONSE=None):
1.166 dwinter 3078: """setze alle collections auf cache = CacheManager"""
3079: if not obj:
3080: obj = self
1.167 dwinter 3081: entries=obj.ZopeFind(obj,search_sub=1)
1.166 dwinter 3082: for entry in entries:
1.236 ! dwinter 3083: if hasattr(entry[1],'_v_hash'):
! 3084: entry[1]._v_hash=None
1.166 dwinter 3085:
3086: return "changed all CM in: "+self.title
1.167 dwinter 3087:
1.166 dwinter 3088:
1.195 casties 3089: security.declarePublic('ECHO_newViewerLink')
1.19 dwinter 3090: def ECHO_newViewerLink(self,obj=None):
3091: """change links (:86 faellt weg)"""
3092:
3093: if not obj:
3094: obj = self
3095:
3096: entries=obj.ZopeFind(obj,obj_metatypes=['ECHO_resource','ECHO_collection'])
3097:
3098: for entry in entries:
3099:
3100: if entry[1].meta_type == 'ECHO_resource':
3101:
3102: entry[1].link=re.sub('\:86','',entry[1].link)
3103:
3104: else:
3105:
3106: entry[1].ECHO_newViewerLink(entry[1])
3107:
3108: return "Rerenderd all links to resources in: "+self.title
1.1 casties 3109:
3110: def __init__(self,id,title):
3111: """init"""
3112: self.id = id
3113: self.title=title
1.13 dwinter 3114:
1.14 dwinter 3115: def deleteSpace(self,str):
3116: """delete space at the end of a line"""
3117: if str[len(str)-1]==" ":
3118: return str[0:len(str)-1]
3119: else:
3120: return str
3121:
3122:
3123:
3124: # zusaetliche methoden fuer das vlp muessen in ein eigenes produkt
3125:
3126: def formatAscii(self,str,url=None):
3127: """ersetze ascii umbrueche durch <br>"""
3128: #url=None
3129: if url:
3130:
3131: retStr=""
3132: words=str.split("\n")
3133:
3134: for word in words:
3135: strUrl=url%word
1.91 dwinter 3136:
1.14 dwinter 3137: retStr+="""<a href="%s">%s</a><br/>"""%(strUrl,word)
3138: str=retStr
3139: if str:
3140: return re.sub(r"[\n]","<br/>",str)
3141: else:
3142: return ""
3143:
3144: def link2html(self,str):
3145: """link2html fuer VLP muss hier noch raus"""
3146: if str:
1.91 dwinter 3147:
1.14 dwinter 3148: str=re.sub("\&","&",str)
1.108 dwinter 3149: dom=xml.dom.minidom.parseString("<?xml version='1.0' encoding='utf-8'?><txt>"+str+"</txt>")
1.14 dwinter 3150: links=dom.getElementsByTagName("link")
3151:
1.91 dwinter 3152:
1.14 dwinter 3153: for link in links:
3154: link.tagName="a"
1.236 ! dwinter 3155: ref=link.getAttribute("ref")
! 3156: pn=link.getAttribute("page")
! 3157:
1.14 dwinter 3158: if self.checkRef(ref):
1.236 ! dwinter 3159: if pn:
! 3160: link.setAttribute("href",self.aq_parent.absolute_url()+"/references?id="+ref+"&page="+pn)
! 3161: else:
! 3162: link.setAttribute("href",self.aq_parent.absolute_url()+"/references?id="+ref)
1.168 dwinter 3163:
1.14 dwinter 3164:
1.113 dwinter 3165: newxml=dom.toxml('utf-8')
1.236 ! dwinter 3166:
! 3167: retStr=regexpTXT.search(newxml)
1.162 dwinter 3168:
1.236 ! dwinter 3169: return retStr.group(1)
1.162 dwinter 3170:
1.236 ! dwinter 3171:
1.14 dwinter 3172: return ""
3173:
1.160 dwinter 3174: def xml2html(self,str,quote="yes"):
1.110 dwinter 3175: """link2html fuer VLP muss hier noch raus"""
1.168 dwinter 3176:
1.110 dwinter 3177: if str:
1.160 dwinter 3178: if quote=="yes2":
3179: str=re.sub("\&","&",str)
1.173 dwinter 3180: #dom=xml.dom.minidom.parseString(str)
1.236 ! dwinter 3181: dom = NonvalidatingReader.parseString(str,"http://www.mpiwg-berlin.mpg.de/")
1.173 dwinter 3182: #links=dom.getElementsByTagName("link")
3183: links=Ft.Xml.XPath.Evaluate(".//link", contextNode=dom)
1.110 dwinter 3184: for link in links:
1.173 dwinter 3185: #link.tagName="a"
1.236 ! dwinter 3186:
1.173 dwinter 3187: ref=link.getAttributeNS(EMPTY_NAMESPACE,"ref")
1.236 ! dwinter 3188: pn=link.getAttributeNS(EMPTY_NAMESPACE,"page")
1.175 dwinter 3189:
1.236 ! dwinter 3190: cns=link.childNodes[0:]
! 3191:
! 3192: newLink=dom.createElementNS(EMPTY_NAMESPACE,"a")
! 3193: for x in cns:
! 3194: newLink.appendChild(x)
! 3195:
! 3196:
! 3197:
! 3198: link.parentNode.replaceChild(newLink,link)
1.110 dwinter 3199: if self.checkRef(ref):
1.236 ! dwinter 3200: if pn:
! 3201: newLink.setAttributeNS(EMPTY_NAMESPACE,"href",self.aq_parent.absolute_url()+"/vlp_coll?id="+ref+"&p="+pn)
! 3202: else:
! 3203: newLink.setAttributeNS(EMPTY_NAMESPACE,"href",self.aq_parent.absolute_url()+"/vlp_coll?id="+ref)
1.110 dwinter 3204:
1.173 dwinter 3205: #str= dom.toxml('utf-8')
1.236 ! dwinter 3206: buf = cStringIO.StringIO()
! 3207: PrettyPrint(dom, stream=buf)
! 3208: str = buf.getvalue()
! 3209: buf.close()
! 3210: #str=PrettyPrint(dom.documentElement,encoding='UTF-8')
! 3211: #print link.toxml('utf-8')
! 3212: #print type(str)
! 3213: retStr=regexpPage.search(str)
! 3214:
! 3215: try: # hack warum fehtl manchmal page??
! 3216: return retStr.group(1)
! 3217: except:
! 3218: return str
1.110 dwinter 3219: return ""
1.14 dwinter 3220:
3221: def checkRef(self,ref):
1.236 ! dwinter 3222: if ref[0:3]=='lit':
! 3223: if len(self.library_data({ 'id':ref}))>0:
! 3224: return 1
! 3225: try:
! 3226: if ref[0:7]=="tec_cat":
! 3227: return 1
! 3228: except:
! 3229: """nothing"""
! 3230:
! 3231: dbs={'vl_technology':'','vl_people':" AND complete='yes'",'vl_sites':''}
! 3232: res=None
! 3233: for db in dbs.keys():
! 3234: res=res or self.search(var=str("select reference from %s where reference =\'%s\' %s"%(db,ref,dbs[db])))
! 3235: return res
1.14 dwinter 3236:
3237: #Ende Methode fuer vlp
3238:
1.13 dwinter 3239: def PgQuoteString(self,string):
3240: """Quote string"""
1.91 dwinter 3241:
1.13 dwinter 3242: return libpq.PgQuoteString(string)
1.217 dwinter 3243:
3244: security.declareProtected('View','getPartners')
1.1 casties 3245: def getPartners(self):
3246: """Get list of Partners. Presently only from a subfolder partners"""
1.236 ! dwinter 3247: if hasattr(self,'partners'):
! 3248: return [ item[1] for item in self.partners.ZopeFind(self.partners,obj_metatypes=['ECHO_partner'])]
! 3249: else:
! 3250: return []
1.157 jdamerow 3251:
3252: def getInstitutions(self):
3253: """Get list of Partners. Presently only from a subfolder partners"""
3254:
3255: return [ item[1] for item in self.institutions.ZopeFind(self.institutions,obj_metatypes=['ECHO_institution'])]
1.1 casties 3256:
1.157 jdamerow 3257:
1.26 dwinter 3258: def getPartnersXML(self):
3259: """partner liste als xml"""
3260: partners=self.getPartners()
1.60 dwinter 3261: ret="""<?xml version="1.0" encoding="utf-8" ?>
1.236 ! dwinter 3262: <partners>"""
1.60 dwinter 3263:
1.236 ! dwinter 3264: for partner in partners:
1.172 dwinter 3265: ret+="""<partner id="%s" title="%s"/>\n"""%(partner.getId(),partner.title)
1.26 dwinter 3266:
3267: return ret+"\n</partners>"
1.24 dwinter 3268:
1.1 casties 3269: def getCollectionTree(self):
3270: """get the collection tree (list of triples (parent,child, depth)"""
3271:
3272: def getCollection(object,depth=0):
3273: depth+=1
3274: collections=[]
3275: for entry in object.__dict__.keys():
3276: element=getattr(object,entry)
3277: try:
3278: if element.meta_type=="ECHO_collection":
3279: collections.append((object,element,depth))
3280: collections+=getCollection(element,depth)
3281: except:
3282: """nothing"""
3283: return collections
3284:
3285:
3286: return getCollection(self)
3287:
3288: def getCollectionTreeIds(self):
3289: """Show the IDs of the Tree"""
3290: ret=[]
3291: for collection in self.getCollectionTree():
3292: ret.append((collection[0].getId(),collection[1].getId(),collection[2]))
3293: return ret
3294:
1.82 dwinter 3295: def getResourcesHTML(self,viewerType=None,filter=None):
1.236 ! dwinter 3296: """gebe all ressourcen aus"""
1.81 dwinter 3297:
1.236 ! dwinter 3298: def sortHTML(x,y):
! 3299: return cmp(x[1].title,y[1].title)
! 3300:
! 3301: ret="""<html><body><h2>Resources in ECHO</h3>"""
! 3302:
! 3303: resources = self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1)
! 3304: ret+="""<h3>Found %i resources</h3>"""%len(resources)
! 3305: resources.sort(sortHTML)
! 3306: for resource in resources:
! 3307: echo_url=resource[1].absolute_url()
! 3308:
! 3309: if hasattr(resource[1],'title'):
! 3310: title=resource[1].title
! 3311: else:
! 3312: title="None"
! 3313: if filter:
! 3314: if re.search(filter,title):
! 3315: ret+="""\n<p><a href="%s">%s</a></p>"""%(echo_url,title)
! 3316: else:
! 3317: ret+="""\n<p><a href="%s">%s</a></p>"""%(echo_url,title)
! 3318:
! 3319: ret +="""\n</body></html>"""
! 3320:
! 3321: #self.REQUEST.RESPONSE.setHeader("Content-Type", "text/html")
! 3322: #self.REQUEST.RESPONSE.write(ret)
! 3323: return ret
1.82 dwinter 3324:
1.81 dwinter 3325: def getResourcesXML(self,viewerType=None,filter=None):
1.236 ! dwinter 3326: """gebe all ressourcen aus"""
! 3327: ret="""<?xml version="1.0" ?>
! 3328: <index>"""
! 3329: for resource in self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1):
! 3330:
! 3331: echo_url=resource[1].absolute_url()
! 3332: if hasattr(resource[1],'link'):
! 3333: viewer_url=resource[1].link
! 3334: else:
! 3335: viewer_url="NO URL"
! 3336: if filter:
! 3337: if re.search(filter,viewer_url):
! 3338: ret+="""\n<resource echoLink="%s" viewerLink="%s"/>"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(viewer_url,safe='/:?'))
! 3339: else:
! 3340: ret+="""\n<resource echoLink="%s" viewerLink="%s"/>"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(viewer_url,safe='/:?'))
! 3341: ret +="""\n</index>"""
! 3342:
! 3343: self.REQUEST.RESPONSE.setHeader("Content-Type", "text/xml")
! 3344: self.REQUEST.RESPONSE.write(ret)
1.83 dwinter 3345:
3346: def getFullTextsXML(self,viewerType=None,filter=None):
1.236 ! dwinter 3347: """gebe all ressourcen aus"""
! 3348: ret="""<?xml version="1.0" ?>
! 3349: <index>"""
! 3350: for resource in self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1):
! 3351:
! 3352: echo_url=resource[1].absolute_url()
! 3353: if resource[1].getFullTextXML(noredirect="yes"):
! 3354: if hasattr(resource[1],'link'):
! 3355: viewer_url=echo_url+"/getFullTextXML"
! 3356: else:
! 3357: viewer_url="NO URL"
! 3358: if filter:
! 3359: if re.search(filter,viewer_url):
! 3360: ret+="""\n<resource echoLink="%s" viewerLink="%s"/>"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(viewer_url,safe='/:?'))
! 3361: else:
! 3362: ret+="""\n<resource echoLink="%s" viewerLink="%s"/>"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(viewer_url,safe='/:?'))
! 3363: ret +="""\n</index>"""
! 3364:
! 3365:
! 3366: self.REQUEST.RESPONSE.setHeader("Content-Type", "text/xml")
! 3367: self.REQUEST.RESPONSE.write(ret)
1.108 dwinter 3368:
3369:
1.109 dwinter 3370: def getMetaDatasXML(self,viewerType=None,filter=None):
1.236 ! dwinter 3371: """gebe all ressourcen aus"""
! 3372: # check if the request's host part was OK
! 3373: http_host = self.REQUEST['HTTP_HOST']
! 3374: host_port = self.REQUEST['SERVER_PORT']
! 3375: fix_host = None
! 3376: if http_host and http_host.rfind(host_port) == -1:
! 3377: print "HTTP_HOST needs fixing!"
! 3378: fix_host = http_host + ":" + host_port
! 3379:
! 3380: ret="""<?xml version="1.0" ?>
! 3381: <index>"""
! 3382: for resource in self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1):
! 3383:
! 3384: echo_url=resource[1].absolute_url()
! 3385: if fix_host:
! 3386: #print "replacing ", http_host, " by ", fix_host
! 3387: echo_url = string.replace(echo_url, http_host, fix_host, 1)
! 3388:
! 3389: if hasattr(resource[1],'link'):
! 3390: meta_url=echo_url+"/getMetaDataXML"
! 3391: else:
! 3392: meta_url="NO_URL"
! 3393:
! 3394: if filter and not re.search(filter,viewer_url):
! 3395: continue
! 3396:
! 3397: #modificationDate=time.strptime(str(resource[1].bobobase_modification_time()),"%Y/%m/%d %H:%M:%S %Z")
! 3398:
! 3399: modificationDate=resource[1].bobobase_modification_time().strftime("%Y/%m/%d %H:%M:%S")
! 3400:
! 3401: ret+="""\n<resource resourceLink="%s" metaLink="%s" modificationDate="%s"/>"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(meta_url,safe='/:?'),modificationDate)
! 3402:
! 3403:
! 3404: ret +="""\n</index>"""
1.170 casties 3405:
1.236 ! dwinter 3406: self.REQUEST.RESPONSE.setHeader("Content-Type", "text/xml")
! 3407: self.REQUEST.RESPONSE.write(ret)
1.108 dwinter 3408:
1.236 ! dwinter 3409:
! 3410: def findPartners(self):
1.106 jdamerow 3411: """find all partners in partners"""
1.107 jdamerow 3412: par=self.ZopeFind(self.partners, obj_metatypes='ECHO_partner')
1.106 jdamerow 3413: return par
1.114 jdamerow 3414:
3415: def getPartnerFromID(self):
3416: """find partner form ID return object"""
1.115 jdamerow 3417: pa=self.REQUEST['partner']
1.116 jdamerow 3418: par=self.ZopeFind(self.partners, obj_ids=[pa])
1.114 jdamerow 3419: return par
1.117 jdamerow 3420:
3421: def getPartnerFromIDParameter(self, id):
3422: """ find partners from ID"""
3423: par=self.ZopeFind(self.partners, obj_ids=[id])
3424: return par
1.157 jdamerow 3425:
3426: def getInstitutionFromID(self,id):
3427: """ find institution from id """
3428: inst=self.ZopeFind(self.institutions, obj_ids=[id])
3429: return inst
1.108 dwinter 3430:
1.1 casties 3431:
1.13 dwinter 3432: def manage_addECHO_root(self,id,title,RESPONSE=None):
1.1 casties 3433: """Add an ECHO_root"""
3434: self._setObject(id,ECHO_root(id,title))
3435:
3436: if RESPONSE is not None:
3437: RESPONSE.redirect('manage_main')
3438:
1.13 dwinter 3439: def manage_addECHO_rootForm(self):
1.1 casties 3440: """Nothing yet"""
1.195 casties 3441: pt=zptFile(self, 'zpt/AddECHO_root.zpt')
1.1 casties 3442: return pt()
1.93 dwinter 3443:
1.189 dwinter 3444: class ECHO_copyrightType(Folder,ECHO_basis):
1.236 ! dwinter 3445: """copyright typ"""
1.93 dwinter 3446:
1.236 ! dwinter 3447: meta_type="ECHO_copyrightType"
! 3448:
! 3449: def __init__(self,id,title,label,url):
! 3450: """init"""
! 3451: self.id=id
! 3452: self.title=title
! 3453: self.label=label
! 3454: self.url=url
1.93 dwinter 3455:
1.236 ! dwinter 3456: manage_options = Folder.manage_options+(
1.93 dwinter 3457: {'label':'Main Config','action':'ECHO_copyrightType_config_mainForm'},
1.236 ! dwinter 3458: )
1.93 dwinter 3459:
1.236 ! dwinter 3460: def ECHO_copyrightType_config_mainForm(self):
! 3461: """change form"""
! 3462: pt=zptFile(self, 'zpt/ChangeECHO_copyrightType')
! 3463: pt.content_type="text/html"
! 3464: return pt()
! 3465:
! 3466: def ECHO_copyrightType_config_main(self,title,label,url,RESPONSE=None):
! 3467: """change"""
! 3468: self.title=title
! 3469: self.label=label
! 3470: self.url=url
1.93 dwinter 3471:
1.236 ! dwinter 3472: if RESPONSE is not None:
! 3473: RESPONSE.redirect('manage_main')
1.93 dwinter 3474:
3475: def manage_addECHO_copyrightTypeForm(self):
3476: """Form for adding a ressource"""
1.195 casties 3477: pt=zptFile(self, 'zpt/AddECHO_copyrightTypeForm.zpt')
1.93 dwinter 3478: return pt()
3479:
3480:
1.119 jdamerow 3481: def manage_addECHO_copyrightType(self,id,title,label,url,RESPONSE=None):
1.93 dwinter 3482: """addaresource"""
3483:
1.119 jdamerow 3484: newObj=ECHO_copyrightType(id,title,label,url)
1.93 dwinter 3485:
3486: self._setObject(id,newObj)
3487:
3488: if RESPONSE is not None:
3489: RESPONSE.redirect('manage_main')
3490:
3491:
1.1 casties 3492:
1.189 dwinter 3493: class ECHO_partner(Image,Persistent,ECHO_basis):
1.1 casties 3494: """ECHO Partner"""
3495:
3496: meta_type="ECHO_partner"
3497:
1.131 jdamerow 3498: def __init__(self, id, title,url, file, copyrightType, person, email, country, color, content_type='', precondition=''):
1.1 casties 3499: self.__name__=id
3500: self.title=title
3501: self.url=url
1.99 jdamerow 3502: self.person=person
3503: self.email=email
3504: self.country=country
1.131 jdamerow 3505: self.color=color
1.1 casties 3506: self.precondition=precondition
1.101 jdamerow 3507: self.copyrightType=copyrightType
1.1 casties 3508: data, size = self._read_data(file)
1.29 dwinter 3509: content_type=self._get_content_type(file, data, id, content_type)
3510: self.update_data(data, content_type, size)
1.1 casties 3511:
3512: manage_options = Image.manage_options+(
3513: {'label':'Partner Information','action':'ECHO_partner_config'},
3514: )
3515:
1.98 dwinter 3516:
1.131 jdamerow 3517: def changeECHO_partner(self,url,copyrightType,person, email, country, color, RESPONSE=None):
1.1 casties 3518: """Change main information"""
3519: self.url=url
1.99 jdamerow 3520: self.person=person
3521: self.email=email
3522: self.country=country
1.131 jdamerow 3523: self.color=color
1.100 jdamerow 3524: self.copyrightType=copyrightType
1.1 casties 3525: if RESPONSE is not None:
3526: RESPONSE.redirect('manage_main')
3527:
3528:
3529:
3530: def ECHO_partner_config(self):
3531: """Main configuration"""
3532: if not hasattr(self,'url'):
3533: self.url=""
1.195 casties 3534: pt=zptFile(self, 'zpt/ChangeECHO_partner.zpt')
1.1 casties 3535: return pt()
3536:
3537:
1.13 dwinter 3538: manage_addECHO_partnerForm=DTMLFile('dtml/ECHO_partnerAdd',globals(),
1.1 casties 3539: Kind='ECHO_partner',kind='ECHO_partner')
3540:
3541:
3542:
1.131 jdamerow 3543: def manage_addECHO_partner(self, id, url, person, email, country, color, file=None, copyrightType='', title='', precondition='', content_type='',
1.1 casties 3544: REQUEST=None):
3545: """
3546: Add a new ECHO_partner object.
3547:
3548: Creates a new ECHO_partner object 'id' with the contents of 'file'.
3549: Based on Image.manage_addImage
3550: """
3551:
3552: id=str(id)
3553: title=str(title)
1.29 dwinter 3554: content_type=str(content_type)
1.1 casties 3555: precondition=str(precondition)
3556:
3557: id, title = OFS.Image.cookId(id, title, file)
3558:
3559: self=self.this()
3560:
3561: # First, we create the image without data:
1.131 jdamerow 3562: self._setObject(id, ECHO_partner(id,title,url,'',copyrightType, person, email, country, color, content_type, precondition))
1.1 casties 3563:
3564: # Now we "upload" the data. By doing this in two steps, we
3565: # can use a database trick to make the upload more efficient.
3566: if file:
3567: self._getOb(id).manage_upload(file)
1.29 dwinter 3568: if content_type:
3569: self._getOb(id).content_type=content_type
1.1 casties 3570:
3571: if REQUEST is not None:
3572: try: url=self.DestinationURL()
3573: except: url=REQUEST['URL1']
3574: REQUEST.RESPONSE.redirect('%s/manage_main' % url)
3575: return id
3576:
1.189 dwinter 3577: class ECHO_linkList(ZopePageTemplate,ECHO_basis):
1.157 jdamerow 3578: """LinkList Objekt"""
3579: meta_type="ECHO_linkList"
3580:
3581: _default_content_fn = os.path.join(package_home(globals()), 'html/ECHO_pageTemplateDefault.html')
3582:
3583: manage_options = ZopePageTemplate.manage_options+(
3584: {'label':'Main Config','action':'changeECHO_linkListWeightForm'},
3585: )
3586:
3587: def content_html(self):
1.236 ! dwinter 3588: """content_html"""
! 3589: return ECHO_basis.content_html(self,'pageTemplate')
1.157 jdamerow 3590:
3591: def changeECHO_linkListWeightForm(self):
3592: """change"""
1.195 casties 3593: pt=zptFile(self, 'zpt/ChangeECHO_linkListTemplate.zpt')
1.157 jdamerow 3594: return pt()
3595:
3596: def changeECHO_linkListWeight(self,contentType,label,RESPONSE=None):
3597: """change"""
3598: self.contentType=contentType
3599: self.label=label
3600:
3601: if RESPONSE is not None:
3602: RESPONSE.redirect('manage_main')
3603:
3604: def getLabel(self):
3605: if hasattr(self,'label'):
3606: return self.label.encode('utf-8')
3607: else:
3608: return 0
3609:
3610: def getcontentType(self):
3611: """get contentType"""
3612: if hasattr(self,'contentType'):
3613: return self.contentType
3614: else:
3615: return 0
3616:
3617: def __init__(self, id, label, title=None, text=None, contentType=None):
3618: self.id = str(id)
3619: self.title=title
3620: self.label=label
3621: self.ZBindings_edit(self._default_bindings)
3622: if text is None:
3623: text = ''
3624: self.pt_edit(text, contentType)
3625:
3626:
3627:
3628:
3629: def manage_addECHO_linkListForm(self):
3630: """Form for adding"""
1.195 casties 3631: pt=zptFile(self, 'zpt/AddECHO_linkListTemplate.zpt')
1.157 jdamerow 3632: return pt()
3633:
3634:
3635: def manage_addECHO_linkList(self, id, label,contentType=0,title=None, text=None,
3636: REQUEST=None, submit=None):
3637: """Add a LinkList with optional file content."""
3638:
3639: id = str(id)
3640: if REQUEST is None:
3641: self._setObject(id, ECHO_linkList(id, label, text))
3642: ob = getattr(self, id)
3643: setattr(ob,'contentType',contentType)
3644: if title:
3645: ob.pt_setTitle(title)
3646: return ob
3647: else:
3648: file = REQUEST.form.get('file')
3649: headers = getattr(file, 'headers', None)
3650: if (headers is None) or (not file.filename):
3651: zpt = ECHO_linkList(id, file)
3652: else:
3653: zpt = ECHO_linkList(id, label,'', file, headers.get('contentType'))
3654:
3655: self._setObject(id, zpt)
3656: ob = getattr(self, id)
3657: if title:
3658: ob.pt_setTitle(title)
3659:
3660: try:
3661: u = self.DestinationURL()
3662: except AttributeError:
3663: u = REQUEST['URL1']
3664:
3665: if submit == " Add and Edit ":
1.195 casties 3666: u = "%s/%s" % (u, urllib.quote(id))
1.157 jdamerow 3667: REQUEST.RESPONSE.redirect(u+'/manage_main')
3668: return ''
3669:
3670:
1.189 dwinter 3671: class ECHO_support(Folder,ECHO_basis):
1.236 ! dwinter 3672: """gefoerdert durch"""
! 3673: meta_type="ECHO_support"
! 3674:
! 3675:
! 3676:
! 3677: def __init__(self,id,institutions=None):
! 3678: """init"""
! 3679: self.id=id
! 3680: self.title=''
! 3681: self.institutions=toList(institutions)
! 3682:
! 3683: def getSupporter(self):
! 3684: """return institutions"""
! 3685: if self.institutions:
! 3686: return self.institutions
! 3687: else:
! 3688: return []
! 3689:
! 3690: manage_options = Folder.manage_options+(
! 3691: {'label':'Main Config','action':'ECHO_support_configForm'},
! 3692: )
! 3693:
! 3694: def ECHO_support_configForm(self):
! 3695: """change form"""
! 3696: pt=zptFile(self, 'zpt/ChangeECHO_support')
! 3697: pt.content_type="text/html"
! 3698: return pt()
! 3699:
! 3700: def ECHO_support_config(self,institutions=None,RESPONSE=None):
! 3701: """change"""
! 3702: self.institutions=toList(institutions)
1.157 jdamerow 3703:
1.236 ! dwinter 3704: if RESPONSE is not None:
! 3705: RESPONSE.redirect('manage_main')
1.157 jdamerow 3706:
1.236 ! dwinter 3707:
1.157 jdamerow 3708: def manage_addECHO_supportForm(self):
3709: """Form for adding"""
1.195 casties 3710: pt=zptFile(self, 'zpt/AddECHO_support.zpt')
1.157 jdamerow 3711: return pt()
3712:
1.159 jdamerow 3713: def manage_addECHO_support(self, id,institutions=None,RESPONSE=None):
1.236 ! dwinter 3714: """add the copyright"""
1.157 jdamerow 3715:
1.236 ! dwinter 3716: meta_type="ECHO_support"
! 3717:
! 3718:
! 3719: self._setObject(id, ECHO_support(id,institutions))
! 3720:
! 3721: if RESPONSE is not None:
! 3722: RESPONSE.redirect('manage_main')
! 3723:
1.157 jdamerow 3724:
1.189 dwinter 3725: class ECHO_institution(Image,Persistent,ECHO_basis):
1.157 jdamerow 3726: """ECHO Institution"""
3727:
3728: meta_type="ECHO_institution"
3729:
3730: def __init__(self, id, title,url, file, person, email, country, content_type='', precondition=''):
3731: self.__name__=id
3732: self.title=title
3733: self.url=url
3734: self.person=person
3735: self.email=email
3736: self.country=country
3737: self.precondition=precondition
3738: data, size = self._read_data(file)
3739: content_type=self._get_content_type(file, data, id, content_type)
3740: self.update_data(data, content_type, size)
3741:
3742: manage_options = Image.manage_options+(
3743: {'label':'Institution Information','action':'ECHO_institution_config'},
3744: )
3745:
3746:
3747: def changeECHO_institution(self,url,person, email, country,RESPONSE=None):
3748: """Change main information"""
3749: self.url=url
3750: self.person=person
3751: self.email=email
3752: self.country=country
3753: if RESPONSE is not None:
3754: RESPONSE.redirect('manage_main')
3755:
3756:
3757:
3758: def ECHO_institution_config(self):
3759: """Main configuration"""
3760: if not hasattr(self,'url'):
3761: self.url=""
1.195 casties 3762: pt=zptFile(self, 'zpt/ChangeECHO_institution.zpt')
1.157 jdamerow 3763: return pt()
3764:
3765:
3766: manage_addECHO_institutionForm=DTMLFile('dtml/ECHO_institutionAdd',globals(),
3767: Kind='ECHO_institution',kind='ECHO_institution')
3768:
3769:
1.1 casties 3770:
1.157 jdamerow 3771: def manage_addECHO_institution(self, id, url, person, email, country, file=None, title='', precondition='', content_type='',
3772: REQUEST=None):
3773: """
3774: Add a new ECHO_institution object.
3775:
3776: Creates a new ECHO_institution object 'id' with the contents of 'file'.
3777: Based on Image.manage_addImage
3778: """
3779:
3780: id=str(id)
3781: title=str(title)
3782: content_type=str(content_type)
3783: precondition=str(precondition)
3784:
3785: id, title = OFS.Image.cookId(id, title, file)
3786:
3787: self=self.this()
3788:
3789: # First, we create the image without data:
3790: self._setObject(id, ECHO_institution(id,title,url,'', person, email, country, content_type, precondition))
3791:
3792: # Now we "upload" the data. By doing this in two steps, we
3793: # can use a database trick to make the upload more efficient.
3794: if file:
3795: self._getOb(id).manage_upload(file)
3796: if content_type:
3797: self._getOb(id).content_type=content_type
3798:
3799: if REQUEST is not None:
3800: try: url=self.DestinationURL()
3801: except: url=REQUEST['URL1']
3802: REQUEST.RESPONSE.redirect('%s/manage_main' % url)
1.160 dwinter 3803: return id
1.188 dwinter 3804:
1.198 casties 3805: def repairCoords(self):
1.236 ! dwinter 3806: """updates map coordinates to new MapArea objects"""
! 3807: msg = ""
! 3808: for cols in self.ZopeFind(self, obj_metatypes=['ECHO_collection','ECHO_resource'], search_sub=1):
! 3809: col = cols[1]
! 3810: if not hasattr(col, 'coords'):
! 3811: continue
! 3812: print "fixing: ", col.id
! 3813: msg += "fixing: "+col.id+"\n"
! 3814: coords = col.coords
1.198 casties 3815: if len(coords) > 0:
1.236 ! dwinter 3816: # delete old MapAreas
! 3817: for areas in self.ZopeFind(col, obj_metatypes=['MapArea']):
! 3818: #area = areas[1]
! 3819: id = areas[0]
! 3820: print " deleting: ", id
! 3821: msg += " deleting: "+id+"\n"
! 3822: col._delObject(id)
! 3823: # add new MapAreas
! 3824: areacnt = 0
! 3825: for coord in coords:
! 3826: if len(coord) < 4:
! 3827: continue
! 3828: type = col.viewClassification
! 3829: if type == 'view point':
! 3830: type = 'arrow'
! 3831: if type is None:
! 3832: if len(coord) > 4:
! 3833: type = 'arrow'
! 3834: else:
! 3835: type = 'area'
! 3836: newid = "a%02d"%areacnt
! 3837: areacnt += 1
! 3838: area = MapArea(newid, coord, type=type)
! 3839: print " adding: ", newid
! 3840: msg += " adding: "+newid+"\n"
! 3841: col.addMapArea(area)
! 3842: msg += "\nDone!"
! 3843: return msg
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>