Annotation of ECHO_content/ECHO_collection.py, revision 1.132
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: """
12: import string
1.14 dwinter 13: import re
1.29 dwinter 14: import os
1.1 casties 15: import OFS.Image
16: from types import *
17: from OFS.Image import Image
18: from Globals import DTMLFile
19: from OFS.Folder import Folder
20: from OFS.SimpleItem import SimpleItem
21: from AccessControl import ClassSecurityInfo
1.85 dwinter 22: from AccessControl.User import UserFolder
1.1 casties 23: from Globals import InitializeClass
24: from Globals import DTMLFile
1.84 dwinter 25: import Globals
1.1 casties 26: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
27: from Products.PageTemplates.PageTemplate import PageTemplate
1.29 dwinter 28: from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
29: from Globals import Persistent, package_home
1.1 casties 30: from Acquisition import Implicit
1.52 dwinter 31: from ECHO_helpers import displayTypes
1.84 dwinter 32:
33:
1.50 dwinter 34: try:
35: from psycopg import libpq
36: except:
37: try:
38: from pyPgSQL import libpq
39: except:
40: print "ECHO_collection: Warning - No libpq imported!"
41:
1.14 dwinter 42: import xml.dom.minidom
1.1 casties 43:
44: import urllib
45: import xml.dom.minidom
1.23 dwinter 46: from ECHO_graphicalOverview import javaHandler,javaScriptMain
1.41 dwinter 47: import ECHO_helpers
1.1 casties 48:
1.104 dwinter 49: def getCopyrightsFromForm(self,argv):
1.98 dwinter 50: medias={}
51: partners={}
52: copyrights={}
53:
54: copyrightsFinal=[]
55: for arg in argv.keys():
1.104 dwinter 56:
1.98 dwinter 57: if arg[0:5]=='media':
58: nm=int(arg[5:])
59: medias[nm]=argv[arg]
60: elif arg[0:5]=='partn':
61: nm=int(arg[5:])
62: partners[nm]=argv[arg]
63: elif arg[0:5]=='copyr':
64: nm=int(arg[5:])
65: copyrights[nm]=argv[arg]
66:
1.104 dwinter 67:
68:
1.98 dwinter 69: copyrightsList=[(medias[nm],partners[nm],copyrights[nm]) for nm in medias.keys()]
70: for copyright in copyrightsList:
1.104 dwinter 71:
72: if copyright[2]=='institution0000':
73: copyrightsFinal.append((copyright[0],copyright[1],self.getPartnerCopyright(copyright[1],'')))
74: else:
75: if not copyright[0]=='':
76: copyrightsFinal.append(copyright)
77:
78:
1.98 dwinter 79: return copyrightsFinal
80:
1.6 dwinter 81: #List of different types for the graphical linking viewer
82: viewClassificationListMaster=['view point','area']
83:
1.98 dwinter 84:
1.73 dwinter 85: def checkDiffs(self,metadict):
86: """check differences"""
87:
1.90 dwinter 88:
89:
90:
1.73 dwinter 91: def NoneToEmpty(obj):
92: if obj:
93: return obj
94: else:
95: return ""
1.90 dwinter 96:
97:
1.73 dwinter 98:
99: diffs={}
1.90 dwinter 100:
1.73 dwinter 101: tags=self.findTagsFromMapping(self.contentType)
1.90 dwinter 102: self.referencetypes=tags[2]
103: self.fields=tags[3]
104:
105:
1.73 dwinter 106: for field in tags[1]:
107: try:
108: if (NoneToEmpty(self.getFieldValue(self.getFieldTag(tags,field)))==metadict[self.getFieldTag(tags,field)]):
109: diffs[self.getFieldTag(tags,field)]=1
110: else:
1.91 dwinter 111:
1.73 dwinter 112: diffs[self.getFieldTag(tags,field)]=0
113: except:
114: diffs[self.getFieldTag(tags,field)]=0
1.91 dwinter 115:
1.73 dwinter 116: return diffs
117:
1.29 dwinter 118: def content_html(self,type):
119: """template fuer content"""
120: #templates = self.ZopeFind(self.aq_parent,obj_ids=[type+"_template"])
121: #
122: #if templates:
123: # return templates[0][1]()
1.97 dwinter 124:
125: if hasattr(self,type+"_template"):
1.29 dwinter 126: obj=getattr(self,type+"_template")
127: return obj()
1.96 dwinter 128: else:
1.29 dwinter 129: pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_%s_template_standard.zpt'%type).__of__(self)
130: pt.content_type="text/html"
131: return pt()
132:
1.1 casties 133: def toList(field):
134: """Einzelfeld in Liste umwandeln"""
135: if type(field)==StringType:
136: return [field]
137: else:
138: return field
139:
140: def getText(nodelist):
141:
142: rc = ""
143: for node in nodelist:
144: if node.nodeType == node.TEXT_NODE:
145: rc = rc + node.data
146: return rc
147:
148:
1.65 casties 149: def sendFile(self, filename, type):
150: """sends an object or a local file (in the product) as response"""
151: paths = filename.split('/')
152: object = self
153: # look for an object called filename
154: for path in paths:
155: if hasattr(object, path):
156: object = getattr(object, path)
157: else:
158: object = None
159: break
160: if object:
161: # if the object exists then send it
1.76 casties 162: return object.index_html(self.REQUEST.REQUEST, self.REQUEST.RESPONSE)
1.65 casties 163: else:
164: # send a local file with the given content-type
165: fn = os.path.join(package_home(globals()), filename)
166: self.REQUEST.RESPONSE.setHeader("Content-Type", type)
167: self.REQUEST.RESPONSE.write(file(fn).read())
168: return
169:
1.87 casties 170: class BrowserCheck:
171: """check the browsers request to find out the browser type"""
172:
173: def __init__(self, zope):
174: self.ua = zope.REQUEST.get_header("HTTP_USER_AGENT")
175: self.isN4 = (string.find(self.ua, 'Mozilla/4.') > -1) and (string.find(self.ua, 'MSIE') < 0)
176: self.isIE = string.find(self.ua, 'MSIE') > -1
177: self.nav = self.ua[string.find(self.ua, '('):]
178: ie = string.split(self.nav, "; ")[1]
179: if string.find(ie, "MSIE") > -1:
180: self.versIE = string.split(ie, " ")[1]
181: self.isMac = string.find(self.ua, 'Macintosh') > -1
182: self.isWin = string.find(self.ua, 'Windows') > -1
183: self.isIEWin = self.isIE and self.isWin
184: self.isIEMac = self.isIE and self.isMac
185:
1.65 casties 186:
1.132 ! dwinter 187:
! 188:
1.123 dwinter 189: def writeMetadata(url,metadict,project=None,startpage=None,xslt=None,thumbtemplate=None,topbar=None,digiLibTemplate=None):
1.87 casties 190: """Einlesen der Metadaten und und erstellen des geaenderten XML file"""
1.123 dwinter 191: def updateTextToolNode(tag,value):
1.130 dwinter 192: #print dom,tag,value
1.123 dwinter 193: metanode=dom.getElementsByTagName('texttool')[0]
194: try:
195: nodeOld=metanode.getElementsByTagName(tag)
196: except:
197: nodeOld=None
198:
199: if nodeOld:
200: metanode.removeChild(nodeOld[0]).unlink()
201:
202: node=dom.createElement(tag)
203: nodetext=dom.createTextNode(value)
204: node.appendChild(nodetext)
205: metanode.appendChild(node)
1.73 dwinter 206:
1.123 dwinter 207:
1.73 dwinter 208: try:
209: geturl=""
210: for line in urllib.urlopen(url).readlines():
211: geturl=geturl+line
212:
213:
214: except:
215: return (None,"Cannot open: "+url)
216:
217: try:
218: dom=xml.dom.minidom.parseString(geturl)
219: except:
220: return (None,"Cannot parse: "+url+"<br>"+geturl)
221:
222: metanodes=dom.getElementsByTagName('bib')
223:
224: if not metanodes:
225: metanodes=dom.getElementsByTagName('archimedes')
226:
227: metanode=metanodes[0]
228:
229: for metaData in metadict.keys():
1.90 dwinter 230:
1.73 dwinter 231: try:
232: nodeOld=metanode.getElementsByTagName(metaData)
233: except:
234: nodeOld=None
235:
236: if nodeOld:
237: metanode.removeChild(nodeOld[0]).unlink()
238: else:
239: # try also old writing rule - instead of _:
240: try:
241: nodeOld=metanode.getElementsByTagName(re.sub('_','-',metaData))
242: except:
243: nodeOld=None
244:
245: if nodeOld:
246: metanode.removeChild(nodeOld[0]).unlink()
247:
248: metanodeneu=dom.createElement(metaData)
1.90 dwinter 249: try:
250: metanodetext=dom.createTextNode(unicode(metadict[metaData],"utf-8"))
251: except:
252: metanodetext=dom.createTextNode(metadict[metaData].encode('utf-8'))
1.73 dwinter 253: metanodeneu.appendChild(metanodetext)
254: metanode.appendChild(metanodeneu)
255:
1.123 dwinter 256:
257:
258:
259:
260: if project:
261: updateTextToolNode('project',project)
262:
263: if startpage:
264: updateTextToolNode('startpage',startpage)
265:
266: if topbar:
267: updateTextToolNode('toptemplate',topbar)
268:
269: if thumbtemplate:
270: updateTextToolNode('thumbtemplate',thumbtemplate)
271:
272: if xslt:
273: updateTextToolNode('xslt',xslt)
274:
275:
1.73 dwinter 276:
1.90 dwinter 277: return dom.toxml().encode('utf-8')
1.73 dwinter 278:
1.90 dwinter 279:
280:
1.1 casties 281: def readMetadata(url):
1.73 dwinter 282: """Methode zum Auslesen der Metadateninformation zu einer Resource
1.1 casties 283: Vorerst noch Typ bib"""
284:
285: metadict={}
286: try:
287: geturl=""
288: for line in urllib.urlopen(url).readlines():
289: geturl=geturl+line
290:
291:
292: except:
293: return (None,"Cannot open: "+url)
294:
295: try:
296: dom=xml.dom.minidom.parseString(geturl)
297: except:
298: return (None,"Cannot parse: "+url+"<br>"+geturl)
299:
300: metanode=dom.getElementsByTagName('bib')
301: metadict['bib_type']='Book'
302: if len(metanode)==0:
303: metanode=dom.getElementsByTagName('archimedes')
304: metadict['bib_type']='Archimedes'
1.91 dwinter 305:
1.1 casties 306:
307: if not len(metanode)==0:
308: metacontent=metanode[0].childNodes
309:
310: try:
311: metadict['bib_type']=getText(dom.getElementsByTagName('bib')[0].attributes['type'].childNodes)
312: except:
313: """nothing"""
314:
315: for node in metacontent:
316: try:
1.95 dwinter 317: #print urllib.unquote(getText(node.childNodes)),getText(node.childNodes)
1.91 dwinter 318: metadict[re.sub('-','_',node.tagName.lower())]=urllib.unquote(getText(node.childNodes))
1.1 casties 319: except:
320: """nothing"""
321:
1.73 dwinter 322:
1.1 casties 323: return metadict,""
324:
325:
1.27 dwinter 326: def setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordstrs,viewClassification=""):
1.1 casties 327:
328: """Allegemeine Informationen zu einer ECHO Collection"""
329:
1.6 dwinter 330: self.viewClassification=viewClassification
331:
1.1 casties 332: self.label = label
333: self.title=title
334: self.description=description
1.27 dwinter 335: self.contentType=contentType
1.1 casties 336: self.responsible=responsible
337: self.credits=toList(credits)
338: self.weight=weight
339:
1.5 dwinter 340: coords=[]
1.1 casties 341: #coordinates of for rectangles
1.10 dwinter 342:
1.91 dwinter 343:
1.9 dwinter 344: if coordstrs:
345: for coordstr in coordstrs:
1.91 dwinter 346:
1.9 dwinter 347: try:
348: temco=coordstr.split(",")
349: except:
350: temco=[]
1.91 dwinter 351:
1.9 dwinter 352: coords.append(temco)
353:
1.10 dwinter 354:
1.5 dwinter 355: self.coords=coords[0:]
1.1 casties 356:
1.98 dwinter 357: class ECHO_copyright(Folder):
358: """Copyright informationen"""
359: meta_type="ECHO_copyright"
360:
361:
362:
363: def __init__(self,id,title,copyrights):
364: """init"""
365: self.title=title
366: self.id=id
367: self.copyrights=copyrights[0:]
368:
369: def getCopyrights(self):
370: """return coyprights"""
371: return self.copyrights
372:
373: manage_options = Folder.manage_options+(
374: {'label':'Main Config','action':'ECHO_copyright_configForm'},
375: )
376:
377: def ECHO_copyright_configForm(self):
378: """change form"""
379: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_copyright').__of__(self)
380: pt.content_type="text/html"
381: return pt()
382:
1.111 dwinter 383: def ECHO_copyright_config(self,title,RESPONSE=None):
1.98 dwinter 384: """change"""
385: self.title=title
386: self.copyrights=[]
1.104 dwinter 387: self.copyrights=getCopyrightsFromForm(self,self.REQUEST.form)[0:]
1.1 casties 388:
1.98 dwinter 389: if RESPONSE is not None:
390: RESPONSE.redirect('manage_main')
391:
392:
393: def manage_addECHO_copyrightForm(self):
394: """Form for adding"""
395: pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_copyright.zpt').__of__(self)
396: return pt()
1.1 casties 397:
1.98 dwinter 398: def manage_addECHO_copyright(self, id,title,RESPONSE=None):
399: """add the copyright"""
1.1 casties 400:
1.98 dwinter 401: meta_type="ECHO_copyright"
402:
403: #first generate copyrights as list of tripels (mediaType,partner,copyrightType)
404:
405:
1.1 casties 406:
1.104 dwinter 407: self._setObject(id, ECHO_copyright(id, title,getCopyrightsFromForm(self,self.REQUEST.form)))
1.1 casties 408:
1.98 dwinter 409: if RESPONSE is not None:
410: RESPONSE.redirect('manage_main')
411:
1.29 dwinter 412: class ECHO_layoutTemplate(ZopePageTemplate):
413: """Create a layout Template for different purposes"""
414:
415: meta_type="ECHO_layoutTemplate"
416:
417: def __init__(self, id, text=None, content_type=None,EchoType=None):
418: self.id = str(id)
419:
420:
421:
422: self.ZBindings_edit(self._default_bindings)
423: if text is None:
424: self._default_content_fn = os.path.join(package_home(globals()),
425: 'zpt/ECHO_%s_template_standard.zpt'%EchoType)
426: text = open(self._default_content_fn).read()
427: self.pt_edit(text, content_type)
428:
1.32 dwinter 429:
1.29 dwinter 430: """change form"""
431:
432:
433: def manage_addECHO_layoutTemplateForm(self):
434: """Form for adding"""
435: pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_layoutTemplate.zpt').__of__(self)
436: return pt()
437:
438: from urllib import quote
439:
440:
441: def manage_addECHO_layoutTemplate(self, EchoType,title=None,REQUEST=None):
442: "Add a Page Template with optional file content."
443: if type(EchoType)==StringType:
444: EchoTypes=[EchoType]
445: else:
446: EchoTypes=EchoType
447:
448: for singleType in EchoTypes:
1.32 dwinter 449:
1.29 dwinter 450: id = str(singleType)+"_template"
451: if REQUEST is None:
452: self._setObject(id, ECHO_layoutTemplate(id, text,EchoType=singleType))
453: ob = getattr(self, id)
454:
455: if title:
456: ob.pt_setTitle(title)
457: return ob
458: else:
459: file = REQUEST.form.get('file')
460: headers = getattr(file, 'headers', None)
461: if headers is None or not file.filename:
462: zpt = ECHO_layoutTemplate(id,EchoType=singleType)
463: else:
464: zpt = ECHO_layoutTemplate(id, file, headers.get('content_type'))
465:
466: self._setObject(id, zpt)
467: ob = getattr(self, id)
468: if title:
469: ob.pt_setTitle(title)
470:
471: try:
472: u = self.DestinationURL()
473: except AttributeError:
474: u = REQUEST['URL1']
475:
476:
477: REQUEST.RESPONSE.redirect(u+'/manage_main')
478: return ''
1.1 casties 479:
1.90 dwinter 480: class ECHO_resource(Folder,Persistent):
1.1 casties 481: """ECHO Ressource"""
1.123 dwinter 482: security=ClassSecurityInfo()
1.1 casties 483: meta_type='ECHO_resource'
484:
1.6 dwinter 485: viewClassificationList=viewClassificationListMaster
1.1 casties 486:
1.41 dwinter 487: getSubCols = ECHO_helpers.getSubCols
1.98 dwinter 488:
1.132 ! dwinter 489: def getAccessRightSelectorHTML(self,outlook="select"):
! 490: """htmlselector"""
! 491: values=['free','mpiwg']
! 492:
! 493: if outlook=="select":
! 494: ret="""<select name="%s">"""%self.getId()
! 495:
! 496: for value in values:
! 497: if value==self.getAccessRightMD():
! 498: ret+="<option selected>%s</option>"%value
! 499: else:
! 500: ret+="<option>%s</option>"%value
! 501: return ret+"</select>"
! 502:
! 503: else:
! 504: ret=""
! 505: for value in values:
! 506: print
! 507: if value==self.getAccessRightMD():
! 508: ret+="""<input type="radio" name="%s" value="%s" checked>%s"""%(self.getId(),value,value)
! 509: else:
! 510: ret+="""<input type="radio" name="%s" value="%s">%s"""%(self.getId(),value,value)
! 511: return ret
! 512:
! 513:
! 514:
! 515: def getAccessRightMD(self):
! 516: """set accessright"""
! 517: url=self.metalink
! 518:
! 519: try:
! 520: geturl=""
! 521: for line in urllib.urlopen(url).readlines():
! 522: geturl=geturl+line
! 523:
! 524:
! 525: except:
! 526: return (None,"Cannot open: "+url)
! 527:
! 528: try:
! 529: dom=xml.dom.minidom.parseString(geturl)
! 530: root=dom.getElementsByTagName('resource')[0]
! 531: except:
! 532: return (None,"Cannot parse: "+url+"<br>"+geturl)
! 533:
! 534: internal=dom.getElementsByTagName('internal')
! 535: if internal:
! 536: institution=dom.getElementsByTagName('institution')
! 537: return getText(institution[0].childNodes)
! 538:
! 539: free=dom.getElementsByTagName('free')
! 540: if free:
! 541: return "free"
! 542:
! 543: return "free" #default free
! 544:
! 545: def changeAccessRightMD(self,accessright,RESPONSE=None):
! 546: """change the rights"""
! 547:
! 548: params="accessright=%s"%accessright
! 549:
! 550:
! 551: #print urllib.urlopen(self.absolute_url()+'/setAccessRightXML'+'?'+params).read()
! 552:
! 553:
! 554: urllib.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()
! 555:
! 556:
! 557: if RESPONSE is not None:
! 558: RESPONSE.redirect('manage_main')
! 559:
! 560:
! 561: def setAccessRightXML(self,accessright):
! 562: """set accessright"""
! 563: url=self.metalink
! 564:
! 565: try:
! 566: geturl=""
! 567: for line in urllib.urlopen(url).readlines():
! 568: geturl=geturl+line
! 569:
! 570:
! 571: except:
! 572: return (None,"Cannot open: "+url)
! 573:
! 574: try:
! 575: dom=xml.dom.minidom.parseString(geturl)
! 576: root=dom.getElementsByTagName('resource')[0]
! 577: except:
! 578: return (None,"Cannot parse: "+url+"<br>"+geturl)
! 579:
! 580: metanodes=dom.getElementsByTagName('access-conditions')
! 581:
! 582: if not metanodes:
! 583: nodenew=dom.createElement('access-conditions')
! 584: root.appendChild(nodenew)
! 585: metanode=nodenew
! 586: else:
! 587: metanode=metanodes[0]
! 588:
! 589: accesses=metanode.getElementsByTagName('access')
! 590:
! 591: if not accesses:
! 592: nodenew2=dom.createElement('access')
! 593: metanode.appendChild(nodenew2)
! 594: metanode2=nodenew2
! 595: else:
! 596: metanode2=accesses[0]
! 597:
! 598: internal=metanode.getElementsByTagName('internal')
! 599:
! 600: if internal:
! 601: metanode2.removeChild(internal[0]).unlink()
! 602:
! 603: free=metanode.getElementsByTagName('free')
! 604:
! 605: if free:
! 606: metanode2.removeChild(internal[0]).unlink()
! 607:
! 608:
! 609: if accessright=='free':
! 610: nodenew3=dom.createElement('free')
! 611: metanode2.appendChild(nodenew3)
! 612: elif accessright=='mpiwg':
! 613: nodenew3=dom.createElement('internal')
! 614: nodenew4=dom.createElement('institution')
! 615: metanodetext=dom.createTextNode('mpiwg')
! 616: nodenew4.appendChild(metanodetext)
! 617: nodenew3.appendChild(nodenew4)
! 618: metanode2.appendChild(nodenew3)
! 619:
! 620: return dom.toxml().encode('utf-8')
! 621:
1.125 dwinter 622: def setStartPageForm(self):
623: """Form for changing the startpage"""
624:
625:
626: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resourceStartPage.zpt').__of__(self)
627: pt.content_type="text/html"
628: return pt()
629:
630:
1.124 dwinter 631: def setStartPage(self,startpage=None,RESPONSE=None):
632: """set start page, if no startpage defined use the generic one of the resource"""
633:
1.125 dwinter 634: if (not (type(startpage)==StringType)) and ("__generic" in startpage): # checke ob generic in der liste
1.124 dwinter 635: startpage=self.absolute_url()+"/startpage_html"
1.125 dwinter 636:
637: if (not startpage) or (startpage=="__generic"):
638: startpage=self.absolute_url()+"/startpage_html"
1.124 dwinter 639:
640:
641: params="startpage=%s"%startpage
1.125 dwinter 642:
1.126 dwinter 643: urllib.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:
1.124 dwinter 645:
646: path=self.metalink
647:
1.128 dwinter 648: path=re.sub(self.REQUEST['SERVER_URL'],'',path)
649: path=re.sub('http://'+self.REQUEST['HTTP_HOST'],'',path)
650:
1.124 dwinter 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:
654: path=re.sub('/index.meta','',path)
655:
656:
1.125 dwinter 657: urllib.urlopen("http://nausikaa2.rz-berlin.mpg.de:86/cgi-bin/toc/admin/reg.cgi?path=%s"%path).readlines()
1.124 dwinter 658:
659: if RESPONSE is not None:
660: RESPONSE.redirect('manage_main')
661:
1.123 dwinter 662: def changeViewerTemplateSetForm(self):
663: """change the viewer template set"""
664: pt=PageTemplateFile('Products/ECHO_content/zpt/changeResourceViewerTemplateSet').__of__(self)
665: return pt()
666:
667:
668: def getTextToolsField(self,name,default=''):
669: """Lese Textoolsfelder aus index.meta im path aus"""
670:
671: try:
672: dom=xml.dom.minidom.parse(self.metalink)
673: node=dom.getElementsByTagName('texttool')[0] #getNode
674: subnode=node.getElementsByTagName(name)[0]
675:
676: # bei text wird nur der Folder gebraucht
677: if name=="text":
678: splitted=getText(subnode.childNodes).split("/")
679: return splitted[len(splitted)-2]
680: else:
681: return getText(subnode.childNodes)
682: except:
683: return default
684:
685:
1.124 dwinter 686: def changeViewerTemplateSet(self,project,xslt,thumbtemplate,topbar,digiLibTemplate,RESPONSE=None):
1.123 dwinter 687: """changeit"""
688:
689: paramList=['project','startpage','xslt','thumbtemplate','topbar','digiLibTemplate']
690:
691:
1.132 ! dwinter 692: #writeMetadata(self.metalink,self.metaDataHash,project,None,xslt,thumbtemplate,topbar,digiLibTemplate)
1.123 dwinter 693:
1.124 dwinter 694: params="project=%s&xslt=%s&thumbtemplate=%s&topbar=%s&digiLibTemplate=%s"%(project,xslt,thumbtemplate,topbar,digiLibTemplate)
695:
1.123 dwinter 696:
697: urllib.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()
698:
699: # hack Pfad auf die Dokumente
700: path=self.metalink
701:
1.127 dwinter 702:
1.123 dwinter 703:
704: path=re.sub('/index.meta','',path)
705:
1.127 dwinter 706: path=re.sub(self.REQUEST['SERVER_URL'],'',path)
707: path=re.sub('http://'+self.REQUEST['HTTP_HOST'],'',path)
708:
709: path=re.sub('http://foxridge.mpiwg-berlin.mpg.de:8080','',path) # falls foxridge als server
710: path=re.sub('http://foxridge.mpiwg-berlin.mpg.de:8080','',path) # falls foxridge als server
711: path=re.sub('http://foxridge.mpiwg-berlin.mpg.de','',path) # falls foxridge als server
712:
1.123 dwinter 713:
1.127 dwinter 714: return urllib.urlopen("http://nausikaa2.rz-berlin.mpg.de:86/cgi-bin/toc/admin/reg.cgi?path=%s"%path).readlines()
1.123 dwinter 715:
716: if RESPONSE is not None:
717: RESPONSE.redirect('manage_main')
718:
1.98 dwinter 719:
1.48 dwinter 720: def getTitle(self):
721: """title"""
1.130 dwinter 722: return self.title.decode('utf-8','ignore')
1.48 dwinter 723:
724: def getLabel(self):
725: """title"""
1.130 dwinter 726: return self.label.decode('utf-8','ignore')
1.41 dwinter 727:
1.29 dwinter 728: def content_html(self):
729: """template fuer content"""
730: return content_html(self,'resource')
731:
1.6 dwinter 732: def getViewClassification(self):
733: if hasattr(self,'viewClassification'):
734: return self.viewClassification
735: else:
736: return ""
1.83 dwinter 737:
738: def getFullTextXML(self,noredirect=None):
1.90 dwinter 739: """getFullTextXML; gives the FullText as an XML Document, and <error></error> if somthing goes wrong."""
1.83 dwinter 740: try:
741: fh=urllib.urlopen(self.metalink)
742: dom=xml.dom.minidom.parse(fh)
743: texttools=dom.getElementsByTagName('texttool')
744: text=texttools[0].getElementsByTagName('text')
745: texturl=getText(text[0].childNodes)
1.90 dwinter 746: self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
1.83 dwinter 747: if not noredirect:
748: self.REQUEST.RESPONSE.redirect(texturl)
749: else:
750: return texturl
751: except:
1.90 dwinter 752:
753: if not noredirect:
754: self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
755: self.REQUEST.RESPONSE.write("<error>no fulltext available</error>")
756: else:
757: return "<error>no fulltext available</error>"
1.92 dwinter 758:
1.104 dwinter 759: def getCopyrightsHTML(self):
1.129 jdamerow 760: """gib (link auf copyright link, mediatyp, institution, copyrightType, label von copyrightType) aus"""
1.104 dwinter 761:
1.126 dwinter 762: if hasattr(self,'copyrightModel'):
763: obj=self.copyrightModel
1.104 dwinter 764:
1.94 dwinter 765: else:
1.104 dwinter 766: return "ERROR"
767: ret=[]
1.94 dwinter 768:
1.104 dwinter 769: for copyright in obj.getCopyrights():
770:
771: link="copyrightTypes/"+copyright[2]+'/copyright.html'
772:
773: try:
1.119 jdamerow 774: copyrightTypeObj=getattr(self.copyrightTypes,copyright[2])
775: label=copyrightTypeObj.label
776: url=copyrightTypeObj.url
777:
778: if url!='':
1.129 jdamerow 779: ret.append((url,copyright[0],copyright[1],copyright[2],label))
1.119 jdamerow 780: else:
781: if hasattr(copyrightTypeObj, 'copyright.html'):
1.129 jdamerow 782: ret.append(("""%s?partner=%s"""%(link,copyright[1]),copyright[0],copyright[1],copyright[2],label))
1.119 jdamerow 783: else:
1.129 jdamerow 784: ret.append(('empty',copyright[0],copyright[1],copyright[2],label))
1.104 dwinter 785: except:
786: """nothing"""
787:
788: return ret
1.83 dwinter 789:
1.9 dwinter 790: def getCredits(self):
791: """Ausgabe der credits"""
792: if self.credits:
793: return self.credits
794: else:
795: return []
1.6 dwinter 796:
1.94 dwinter 797: def __init__(self,id,link,metalink,resourceID,title,label,description,contentType,renderingType,copyrightType,responsible,credits,weight,coords):
1.1 casties 798:
799: self.id = id
800: """Festlegen der ID"""
801:
802: self.label = label
803: self.link= link
804: self.metalink=metalink
805: self.title=title
806: self.weight=weight
807: self.credits=toList(credits)
808: self.description=description
1.27 dwinter 809: self.contentType=contentType
1.94 dwinter 810: self.copyrightType=copyrightType
1.90 dwinter 811: self.renderingType=renderingType
1.1 casties 812: self.responsible=responsible
1.90 dwinter 813: self.resourceID=resourceID
814:
1.9 dwinter 815: if coords:
816: coordsnew=[ string.split(x,",") for x in coords]
817: else:
818: coordsnew=[]
819:
1.1 casties 820: self.coords=coordsnew
821:
1.3 dwinter 822:
823: def getCoords(self):
1.73 dwinter 824: """gibt coordinaten als String zurück und löscht zugleich einträge die keine Koordinaten sind, letzteres zur korrektur der Eingabe der alten version"""
825: retList=[]
826: if hasattr(self,'coords'):
827: for x in self.coords:
828: if len(x)>1:
829: retList.append(string.join(x,","))
830: return retList
831:
832:
1.3 dwinter 833:
1.49 dwinter 834: def getContentType(self):
835: try:
836: return self.contentType
837: except:
838: return ""
1.1 casties 839:
1.73 dwinter 840: def getCopyrightType(self):
841: try:
842: return self.copyrightType
843: except:
844: return ""
845:
846: def getRenderingType(self):
847: try:
848: return self.renderingType
849: except:
850: return ""
851:
1.1 casties 852: def ECHO_resource_config(self):
853: """Main configuration"""
854:
855: if not hasattr(self,'weight'):
856: self.weight=""
857:
1.13 dwinter 858: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resource.zpt').__of__(self)
1.1 casties 859: return pt()
860:
861:
1.73 dwinter 862: def ECHO_resource_config_main(self):
863: """Main configuration"""
864:
865: if not hasattr(self,'weight'):
866: self.weight=""
867:
868: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resource_main.zpt').__of__(self)
869: return pt()
870:
871: def ECHO_resource_config_coords(self):
872: """Coords configuration """
873:
874: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resource_coords.zpt').__of__(self)
875: return pt()
876:
877: def ECHO_resource_config_credits(self):
878: """Main configuration"""
879:
880: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resource_credits.zpt').__of__(self)
881: return pt()
882:
883: def ECHO_resource_config_metadata(self):
884: """Main configuration"""
885:
886: if (hasattr(self,'metadata')) and not (hasattr(self,'metaDataHash')):
887: self.metaDataHash={}
888: self.contentType=self.bib_type
889: for data in self.metadata:
890: data_neu=re.sub('-','_',data)
1.123 dwinter 891: self.metaDataHash[data_neu]=getattr(self,data)[0:]
1.91 dwinter 892:
1.73 dwinter 893:
894: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resource_metadata.zpt').__of__(self)
895: return pt()
896:
897:
898:
899:
900: def changeECHO_resource_main(self,metalink,link,title,label,description,contentType,renderingType,weight,resourceID,RESPONSE=None):
901: """Änderung der Properties"""
902: self.resourceID=resourceID
903: self.title=title
904: self.label=label
905: self.description=description
906:
907: self.contentType=contentType
908: self.renderingType=renderingType
909: self.weight=weight
910:
911: self.link=link
912: self.metalink=metalink
913:
914: if RESPONSE is not None:
915: RESPONSE.redirect('manage_main')
916:
917:
918: def changeECHO_resource_coords(self,coords,viewClassification,RESPONSE=None):
919: """Änderung der Properties - coords"""
920:
1.78 dwinter 921: if type(coords)==StringType:
922: coords=[coords]
923:
1.79 casties 924: try:
1.73 dwinter 925: coordsnew=[ string.split(x,",") for x in coords]
926: except:
927: coordsnew=[]
928:
929: self.coords=coordsnew[0:]
930: self.viewClassification=viewClassification
931:
932: if RESPONSE is not None:
933: RESPONSE.redirect('manage_main')
934:
935: def changeECHO_resource_credits(self,credits,responsible,copyrightType,RESPONSE=None):
936: """Änderung der Properties"""
937: self.credits=credits
938: self.responsible=responsible
939: self.copyrightType=copyrightType
940:
941: if RESPONSE is not None:
942: RESPONSE.redirect('manage_main')
943:
944:
1.90 dwinter 945: def changeECHO_resource_metadata_local(self,RESPONSE=None):
946: """change metadata"""
947: tags=self.findTagsFromMapping(self.contentType)
948: for field in tags[1]:
1.123 dwinter 949: self.metaDataHash[self.getFieldTag(tags,field)]=self.REQUEST.form[self.getFieldTag(tags,field)][0:]
1.90 dwinter 950:
951:
952:
953: if RESPONSE is not None:
954: RESPONSE.redirect('manage_main')
955:
1.73 dwinter 956: def changeECHO_resource_metadata(self,RESPONSE=None):
957: """change metadata"""
958: tags=self.findTagsFromMapping(self.contentType)
1.75 dwinter 959: self.OSAS_meta={}
1.73 dwinter 960: for field in tags[1]:
961: try:
962: self.metaDataHash[self.getFieldTag(tags,field)]=self.REQUEST.form[self.getFieldTag(tags,field)]
963: self.OSAS_meta[self.getFieldTag(tags,field)]=self.REQUEST.form['OSAS_%s'%self.getFieldTag(tags,field)]
964: except:
965: """nothing"""
966:
1.123 dwinter 967: urllib.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()
968:
969:
1.73 dwinter 970: if RESPONSE is not None:
971: RESPONSE.redirect('manage_main')
972:
973:
1.90 dwinter 974: def getMDValue(self,fieldName):
975: return self.metaDataHash.get(fieldName,'!!NOT USED HERE in Type: %s'%self.contentType)
976:
1.123 dwinter 977: def newMetaXML(self,project=None,startpage=None,xslt=None,thumbtemplate=None,topbar=None,digiLibTemplate=None):
1.75 dwinter 978: """new index.meta"""
1.73 dwinter 979: self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
980:
1.123 dwinter 981: if not hasattr(self,'metaDataHash'):
1.130 dwinter 982:
1.123 dwinter 983: self.copyIndex_meta2echo_resource()
984: try:
985: return writeMetadata(self.metalink,self.OSAS_meta,project,startpage,xslt,thumbtemplate,topbar,digiLibTemplate)
986: except:
987: return writeMetadata(self.metalink,self.metaDataHash,project,startpage,xslt,thumbtemplate,topbar,digiLibTemplate)
1.90 dwinter 988:
1.123 dwinter 989: def getMetaDataXML(self,project=None,startpage=None,xslt=None,thumbtemplate=None,topbar=None,digiLibTemplate=None):
1.90 dwinter 990: """prints out metadata as stored in the echo environment, format is the index.meta format"""
991: self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
992: return writeMetadata(self.metalink,self.metaDataHash)
993:
1.27 dwinter 994: def changeECHO_resource(self,metalink,link,title,label,description,contentType,responsible,weight,viewClassification="",coords=None,credits=None,RESPONSE=None):
1.1 casties 995: """Änderung der Properties"""
996:
1.33 dwinter 997: try:
998: coordsnew=[ string.split(x,",") for x in coords]
999: except:
1000: coordsnew=[]
1.21 dwinter 1001:
1.27 dwinter 1002: setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordsnew)
1.62 dwinter 1003: self.viewClassification=viewClassification
1.21 dwinter 1004: self.coords=coordsnew[0:]
1.1 casties 1005: self.link=link
1006: self.metalink=metalink
1007:
1008: if RESPONSE is not None:
1009: RESPONSE.redirect('manage_main')
1010:
1011:
1012: manage_options = Folder.manage_options+(
1.73 dwinter 1013: {'label':'Main Config','action':'ECHO_resource_config_main'},
1014: {'label':'Change Metadata','action':'ECHO_resource_config_metadata'},
1015: {'label':'Change Coords','action':'ECHO_resource_config_coords'},
1016: {'label':'Add coords','action':'ECHO_graphicEntry'},
1017: {'label':'Sync Metadata','action':'ECHO_getResourceMD'},
1.123 dwinter 1018: {'label':'Change TemplateSets','action':'changeViewerTemplateSetForm'},
1.125 dwinter 1019: {'label':'set/change startpage','action':'setStartPageForm'},
1.130 dwinter 1020: {'label':'Copy MD for indexing and search','action':'copySearchFields'},
1.73 dwinter 1021: )
1.1 casties 1022:
1.20 dwinter 1023: def getOverview(self):
1024: """overview graphics"""
1025:
1026: return self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['overview'])[0][1]
1027:
1.3 dwinter 1028: def ECHO_graphicEntry(self):
1029: """DO nothing"""
1.20 dwinter 1030: overview = self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['overview'])
1.19 dwinter 1031: if overview:
1.13 dwinter 1032: pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_draw.zpt').__of__(self)
1.3 dwinter 1033: return pt()
1034: else:
1035: return "NO OVERVIEW GRAPHICS"
1036:
1.4 dwinter 1037: def ECHO_enterCoords(self,coordstr,angle="",RESPONSE=None):
1.3 dwinter 1038: """Enter coords"""
1039: coords=self.coords
1.4 dwinter 1040: temco=coordstr.split(",")
1041: temco.append(angle)
1042: coords.append(temco)
1043:
1.3 dwinter 1044: self.coords=coords[0:]
1.13 dwinter 1045:
1.3 dwinter 1046: if RESPONSE is not None:
1047: RESPONSE.redirect('ECHO_graphicEntry')
1048:
1.73 dwinter 1049:
1050: def isDefinedInThisSet(self,fields,field):
1051: """checks if field is defined in fields"""
1052: if (fields[0].has_key(field)) and not (fields[0][field]==""):
1053: return 1
1054: else:
1055:
1056: return 0
1057:
1058: def getFieldLabel(self,fields,field):
1059: """get labels"""
1060: try:
1061: ret =fields[0][field]
1062: if ret == "":
1063: return field
1064: else:
1065: return ret
1066: except:
1067: return field
1068:
1069:
1070:
1071: def getFieldTag(self,fields,field):
1072: """get labels"""
1073: try:
1074: ret =fields[0][field]
1075: if ret == "":
1076: return field
1077: else:
1078: return ret
1079: except:
1080: return field
1081:
1082:
1083:
1084: def getFieldValue(self,field):
1085: """get value"""
1.91 dwinter 1086:
1.73 dwinter 1087: try:
1088:
1089: ret=self.metaDataHash[field]
1090: if ret == "":
1091: return None
1092: else:
1093: return ret
1094: except:
1095: return None
1096:
1.90 dwinter 1097: def getMetaDataHash(self):
1098: """md hash"""
1099: return self.metaDataHash
1100:
1101: def setFieldValue(self,field,value):
1102: """get value"""
1.91 dwinter 1103:
1.90 dwinter 1104: if not hasattr(self,'metaDataHash'):
1105: setattr(self,'metaDataHash',{})
1106: self.metaDataHash[field]=value[0:]
1107:
1108:
1.130 dwinter 1109: def copySearchFields(self):
1110: """copys metadatafields to the object"""
1111: fields=['author','title','year']
1112: for field in fields:
1113: setattr(self,'MD_'+field,self.getFieldValue(field))
1114:
1.90 dwinter 1115:
1.73 dwinter 1116: def findLabelsFromMapping(self,referenceType):
1117: """gib hash mit label -> generic zurueck"""
1.90 dwinter 1118: #return {},[]
1119:
1120: temp=self.ZopeFind(self.standardMD)
1121:
1122: if referenceType=="":
1123: referenceType="book"
1124:
1.73 dwinter 1125:
1126: bibdata={}
1127: retdata={}
1.90 dwinter 1128: fields=[]
1.73 dwinter 1129: fieldlist=self.standardMD.fieldList
1130:
1131: for referenceTypeF in self.referencetypes:
1.91 dwinter 1132:
1.86 dwinter 1133: if referenceTypeF[1].title.lower() == referenceType.lower():
1.91 dwinter 1134:
1.86 dwinter 1135: try:
1136: bibdata[referenceTypeF[1].title]=referenceTypeF[1].fields
1137: referenceType=referenceTypeF[1].title
1138: except:
1139: bibdata[referenceType]=referenceTypeF[1].fields
1140:
1141:
1.73 dwinter 1142: bibdata['data']=referenceTypeF[1]
1.90 dwinter 1143: fields=bibdata[referenceType]
1.73 dwinter 1144: for field in fieldlist:
1145: retdata[field]=referenceTypeF[1].getValue(field)[1]
1.91 dwinter 1146:
1.90 dwinter 1147: return retdata,fieldlist,temp,fields
1.73 dwinter 1148:
1149: def findTagsFromMapping(self,referenceType):
1150: """gib hash mit label -> generic zurueck"""
1.90 dwinter 1151:
1152:
1153: if referenceType=="":
1154: referenceType="book"
1155:
1156: temp = self.ZopeFind(self.standardMD)[0:]
1157:
1158:
1159: #self.referencetypes=temp[0:]
1160:
1.73 dwinter 1161:
1162:
1.90 dwinter 1163:
1164:
1165:
1.73 dwinter 1166: bibdata={}
1167: retdata={}
1168: fieldlist=self.standardMD.fieldList
1.130 dwinter 1169: fields=[]
1.90 dwinter 1170: for referenceTypeF in temp:
1.130 dwinter 1171: #print referenceType
1.73 dwinter 1172:
1.86 dwinter 1173: if referenceTypeF[1].title.lower() == referenceType.lower():
1174: try:
1175: bibdata[referenceTypeF[1].title]=referenceTypeF[1].fields
1176: referenceType=referenceTypeF[1].title
1177: except:
1178: bibdata[referenceType]=referenceTypeF[1].fields
1.73 dwinter 1179: bibdata['data']=referenceTypeF[1]
1.90 dwinter 1180: fields=bibdata[referenceType]
1.73 dwinter 1181: for field in fieldlist:
1182: retdata[field]=referenceTypeF[1].getValue(field)[0]
1183:
1.90 dwinter 1184: return retdata,fieldlist,temp,fields
1.73 dwinter 1185:
1186:
1.123 dwinter 1187: security.declarePublic('copyIndex_meta2echo_resource') # has to be change, presentlyset because of OSAS koordination
1.90 dwinter 1188: def copyIndex_meta2echo_resource(self,RESPONSE=None):
1189: """copy MD von Index_meta to the echo_resource"""
1.95 dwinter 1190:
1.90 dwinter 1191: (metadict, error)=readMetadata(self.metalink)
1.123 dwinter 1192:
1.130 dwinter 1193:
1.90 dwinter 1194:
1195: self.metaDataHash={}
1196: if not error=="": #Fehler beim Auslesen des Metafiles
1.130 dwinter 1197:
1.90 dwinter 1198: return "ERROR:",error
1.130 dwinter 1199:
1200: self.contentType=metadict['bib_type'][0:]
1.90 dwinter 1201: fields=self.findTagsFromMapping(self.contentType)
1.95 dwinter 1202:
1.90 dwinter 1203: #fields=self.findLabelsFromMapping(self.contentType)
1204: for field in fields[1]:
1.95 dwinter 1205:
1.90 dwinter 1206: if self.isDefinedInThisSet(fields,field):
1.95 dwinter 1207: #print urllib.unquote(metadict.get(self.getFieldTag(fields,field),''))
1.90 dwinter 1208: self.setFieldValue(self.getFieldTag(fields,field),metadict.get(self.getFieldTag(fields,field),''))
1209:
1210:
1211:
1212: if RESPONSE:
1213: return RESPONSE.redirect('manage_main')
1214:
1.1 casties 1215: def ECHO_getResourceMD(self,template="yes"):
1216: """Einlesen der Metadaten und Anlegen dieser Metadaten als Informationen zur Resource"""
1217: (metadict, error)=readMetadata(self.metalink)
1218:
1.90 dwinter 1219:
1.1 casties 1220:
1221: if not error=="": #Fehler beim Auslesen des Metafiles
1.73 dwinter 1222: return "ERROR:",error
1223:
1224:
1.86 dwinter 1225: if not (metadict['bib_type'].lower()==self.contentType.lower()):
1.73 dwinter 1226: self.REQUEST.SESSION['contentStorage']=metadict['bib_type']
1227: self.REQUEST.SESSION['contentZope']=self.contentType
1.1 casties 1228:
1.73 dwinter 1229: return PageTemplateFile('Products/ECHO_content/zpt/ECHO_getResourceMDErrorContentType.zpt').__of__(self)()
1.1 casties 1230:
1.90 dwinter 1231: self.REQUEST.SESSION['metadict']=metadict
1232:
1233:
1234:
1235: self.REQUEST.SESSION['diffs']=checkDiffs(self,self.REQUEST.SESSION['metadict'])
1236:
1.13 dwinter 1237:
1.73 dwinter 1238:
1.1 casties 1239: if template=="yes":
1.90 dwinter 1240: pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_resourceMD.zpt').__of__(self)
1241: return pt()
1.73 dwinter 1242:
1.90 dwinter 1243:
1.73 dwinter 1244:
1245:
1.1 casties 1246:
1247: def ECHO_getMD(self,item):
1248: """Ausgabe der MD"""
1249: return getattr(self,item)
1250:
1251: def index_html(self):
1252: """standard page"""
1253:
1254: return self.REQUEST.RESPONSE.redirect(self.link)
1255:
1.90 dwinter 1256: def startpage_html(self):
1257: """prints out a startpage for a resource for use e.g. in the BVE"""
1258:
1259: # suche ob startpage.html in dem Ordner vorhanden ist, dann wir diese angezeigt
1260:
1261: sp=self.ZopeFind(self,obj_ids=['startpage.html'])
1262:
1263: if sp:
1264: return sp[1]()
1265:
1266: #prüfen ob irgendwo ein template
1267: if hasattr(self,'startpage_index_template'):
1268: return self.startpage_index_template()
1269:
1270: #generisches template ausgeben
1271:
1272: pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_startpage_index_template_standard.zpt').__of__(self)
1273: pt.content_type="text/html"
1274: return pt()
1275:
1276: def toc_html(self):
1277:
1278: sp=self.ZopeFind(self,obj_ids=['toc.html'])
1279:
1280: if sp:
1281: return sp[0][1]()
1282:
1283:
1.123 dwinter 1284: security.declarePublic('generate_label') # has to be change, presentlyset because of OSAS koordination
1.1 casties 1285: def generate_label(self):
1286: """Erzeugt_standard_Label aus Template"""
1.123 dwinter 1287: pt=getattr(self,"label_template_"+self.contentType.lower())
1.13 dwinter 1288:
1.123 dwinter 1289: self.label=pt()[0:]
1.1 casties 1290: return pt()
1291:
1.123 dwinter 1292: security.declarePublic('generate_title') # has to be change, presentlyset because of OSAS koordination
1.90 dwinter 1293: def generate_title(self,RESPONSE=None):
1294: """Erzeugt_standard_Label aus Template"""
1.123 dwinter 1295: pt=getattr(self,"label_template_"+self.contentType.lower())
1.90 dwinter 1296:
1.123 dwinter 1297: self.title=pt()[0:]
1.90 dwinter 1298:
1299: return pt()
1300:
1.123 dwinter 1301: Globals.InitializeClass(ECHO_resource)
1302:
1.13 dwinter 1303: def manage_addECHO_resourceForm(self):
1304: """Form for adding a ressource"""
1305: pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_resourceForm.zpt').__of__(self)
1.1 casties 1306: return pt()
1307:
1308:
1.10 dwinter 1309:
1.94 dwinter 1310: 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.13 dwinter 1311: """addaresource"""
1.1 casties 1312:
1.94 dwinter 1313: newObj=ECHO_resource(id,link,metalink,resourceID,title,label,description,contentType,renderingType,copyrightType,responsible,credits,weight,coords)
1.1 casties 1314:
1315: self._setObject(id,newObj)
1.13 dwinter 1316:
1.1 casties 1317: if RESPONSE is not None:
1318: RESPONSE.redirect('manage_main')
1319:
1320:
1321: class ECHO_externalLink(Folder):
1322: """Link zu einer externen Ressource"""
1323: security=ClassSecurityInfo()
1324: meta_type='ECHO_externalLink'
1325:
1.48 dwinter 1326: def getTitle(self):
1327: """title"""
1328: return self.title.encode('utf-8')
1329:
1330: def getLabel(self):
1331: """title"""
1332: return self.label.encode('utf-8')
1333:
1.29 dwinter 1334: def content_html(self):
1335: """template fuer content"""
1336: return content_html(self,'externalLink')
1337:
1.27 dwinter 1338: def __init__(self,id,link,title,label,description,contentType,responsible,credits,weight,coords):
1.1 casties 1339:
1340: self.id = id
1341: """Festlegen der ID"""
1342:
1343: self.credits=toList(credits)
1344: self.label = label
1345: self.link= link
1346: self.title=title
1347: self.weight=weight
1348: self.description=description
1.27 dwinter 1349: self.contentType=contentType
1.1 casties 1350: self.responsible=responsible
1351: coordsnew=[ string.split(x,",") for x in coords]
1352: self.coords=coordsnew
1353:
1354: def ECHO_externalLink_config(self):
1355: """Main configuration"""
1356:
1357: if not hasattr(self,'weight'):
1358: self.weight=""
1359: if not hasattr(self,'coords'):
1.9 dwinter 1360:
1.1 casties 1361: self.coords=['']
1.91 dwinter 1362:
1.1 casties 1363:
1.13 dwinter 1364: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_externalLink.zpt').__of__(self)
1.1 casties 1365: return pt()
1366:
1367:
1.37 dwinter 1368: def changeECHO_externalLink(self,link,title,label,description,contentType,responsible,weight,coords=None,credits=None,RESPONSE=None):
1.1 casties 1369:
1370: """Änderung der Properties"""
1.36 dwinter 1371: try:
1372: coordsnew=[ string.split(x,",") for x in coords]
1373: except:
1374: coordsnew=[]
1.1 casties 1375:
1.27 dwinter 1376: setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coords)
1.1 casties 1377:
1.21 dwinter 1378: self.coords=coordsnew[0:]
1.1 casties 1379: self.link=link
1380: if RESPONSE is not None:
1381: RESPONSE.redirect('manage_main')
1382:
1383:
1384: manage_options = Folder.manage_options+(
1385: {'label':'Main Config','action':'ECHO_externalLink_config'},
1386: )
1.17 dwinter 1387:
1388:
1.1 casties 1389: def index_html(self):
1390: """standard page"""
1391:
1392: return self.REQUEST.RESPONSE.redirect(self.link)
1393:
1.13 dwinter 1394: def manage_addECHO_externalLinkForm(self):
1395: """Form for external Links"""
1396: pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_externalLinkForm.zpt').__of__(self)
1.1 casties 1397: return pt()
1398:
1399:
1.27 dwinter 1400: def manage_addECHO_externalLink(self,id,title,label,description,contentType,responsible,link,weight,coords=None,credits=None,RESPONSE=None):
1.13 dwinter 1401: """Add an external Link"""
1.1 casties 1402:
1.27 dwinter 1403: newObj=ECHO_externalLink(id,link,title,label,description,contentType,responsible,credits,weight,coords)
1.1 casties 1404:
1405: self._setObject(id,newObj)
1.13 dwinter 1406:
1.1 casties 1407: if RESPONSE is not None:
1408: RESPONSE.redirect('manage_main')
1409:
1.24 dwinter 1410:
1.51 dwinter 1411: class ECHO_link(ECHO_externalLink):
1412: """external_link"""
1413:
1414: meta_type="ECHO_link"
1415:
1416:
1.53 dwinter 1417: def content_html(self):
1.80 dwinter 1418: """template fuer link"""
1419: if hasattr(self,"link_template"):
1420: return content_html(self,'link')
1421: else:
1422: return content_html(self,'collection')
1.53 dwinter 1423:
1.51 dwinter 1424: def manage_addECHO_linkForm(self):
1425: """Form for external Links"""
1426: pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_linkForm.zpt').__of__(self)
1427: return pt()
1428:
1429:
1430: def manage_addECHO_link(self,id,title,label,description,contentType,responsible,link,weight,coords=None,credits=None,RESPONSE=None):
1431: """Add an external Link"""
1432:
1433: newObj=ECHO_link(id,link,title,label,description,contentType,responsible,credits,weight,coords)
1434:
1435: self._setObject(id,newObj)
1436:
1437: if RESPONSE is not None:
1438: RESPONSE.redirect('manage_main')
1439:
1.24 dwinter 1440:
1.1 casties 1441: class ECHO_collection(Folder, Persistent, Implicit):
1442: """ECHO Collection"""
1.84 dwinter 1443:
1.1 casties 1444: security=ClassSecurityInfo()
1445: meta_type='ECHO_collection'
1.69 dwinter 1446: viewClassificationList=viewClassificationListMaster
1447: displayTypes=displayTypes
1448:
1.130 dwinter 1449: path="/mpiwg/online/permanent/shipbuilding"
1.132 ! dwinter 1450:
! 1451: def changeAccessRightsCollection(self):
! 1452: """change"""
! 1453: ret=""
! 1454: argv=self.REQUEST.form
! 1455:
! 1456: resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'])
! 1457: for resource in resources:
! 1458:
! 1459: try:
! 1460: ret+=resource[1].getId()+" "+argv[resource[1].getId()]+"</br>"
! 1461: resource[1].changeAccessRightMD(argv[resource[1].getId()])
! 1462: except:
! 1463: """not"""
! 1464: return ret
! 1465:
! 1466:
1.130 dwinter 1467: def updateCollection(self,RESPONSE=None):
1468: """liest verzeichnisse aus dem pfad und legt sie dann als objekte in den ordner"""
1469: files=os.listdir(self.path)
1470: ret=""
1471: for fileName in files:
1472:
1473: if fileName:
1474:
1475: tempPath=re.sub("/mpiwg/online","",self.path)
1476: link="http://echo.mpiwg-berlin.mpg.de/zogilib_book?fn="+tempPath+"/"+fileName+"/pageimg"
1477:
1478: metalink=self.path+"/"+fileName+"/index.meta"
1479: try:
1480:
1481: #link="http://nausikaa2.mpiwg-berlin.mpg.de/cgi-bin/toc/toc.x.cgi?dir="+fileName+"&step=thumb"
1482:
1483: newObj=ECHO_resource(fileName,link,metalink,fileName,fileName,fileName,'generated','book','','','','','','')
1484: self._setObject(fileName,newObj)
1485:
1486: genObj=getattr(self,fileName)
1487: #genObj.createIndexFile()
1488: ret+="OK:"+fileName+"<br/>"
1489: except:
1490: print "ERROR"
1491: ret+="ERROR:"+fileName+"<br/>"
1492:
1493: return ret
1494:
1495: if RESPONSE is not None:
1496: RESPONSE.redirect('manage_main')
1497:
1498: def updateCollectionMD(self,RESPONSE=None):
1499: """updateMD"""
1500: files=os.listdir(self.path)
1501: for fileName in files:
1502: if fileName:
1503: genObj=getattr(self,fileName)
1504: genObj.copyIndex_meta2echo_resource()
1505: genObj.generate_title()
1506:
1507: if RESPONSE is not None:
1508: RESPONSE.redirect('manage_main')
1509:
1510:
1.123 dwinter 1511:
1512: def changeViewerTemplateSetsForm(self):
1513: """change the viewer template set"""
1514: pt=PageTemplateFile('Products/ECHO_content/zpt/changeViewerTemplateSet').__of__(self)
1515: return pt()
1516:
1517: def getViewerTemplateSets(self,obj_ids=None):
1518: """Get the ViewerTemplateSet title for configuration"""
1519: ret=[]
1520:
1521: try:
1522: viewerTemplateSets=self.ZopeFind(self.viewerTemplateSets,obj_metatypes=['OSAS_viewerTemplateSet'],obj_ids=obj_ids)#assumes viewerTemplateSets folder somewhere in the hierarchie.
1523:
1524: for viewerTemplateSet in viewerTemplateSets:
1525: ret.append((viewerTemplateSet[1].title,viewerTemplateSet[0],viewerTemplateSet[1]))
1526:
1527: return ret
1528:
1529: except:
1530: return [('no ViewerTemplateSetfolders','')]
1531:
1532: def getTextToolsField(self,name,default=''):
1533: """Lese viewerTemplateSet der Collection not implemented yet!"""
1534:
1535: return default
1536:
1537:
1538: def isSelectedViewerTemplateSet(self,obj,id):
1539: """is ausgewählt"""
1540:
1541: if self.REQUEST['viewerTemplateSet']==id:
1542: return 1
1543: else:
1544: return None
1545:
1.124 dwinter 1546: def changeViewerTemplateSets(self,project,xslt,thumbtemplate,topbar,digiLibTemplate,RESPONSE=None):
1.123 dwinter 1547: """change the templates"""
1548:
1549: resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'])
1550:
1551: for resource in resources:
1.130 dwinter 1552:
1.124 dwinter 1553: resource[1].changeViewerTemplateSet(project,xslt,thumbtemplate,topbar,digiLibTemplate)
1.123 dwinter 1554:
1555: if RESPONSE is not None:
1556: RESPONSE.redirect('manage_main')
1557:
1558:
1.130 dwinter 1559: def copySearchFields(self,RESPONSE=None):
1560: """copys import metadatafields to the object"""
1561: resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'])
1562:
1563: for resource in resources:
1564:
1565: resource[1].copySearchFields()
1566:
1567: if RESPONSE is not None:
1568: RESPONSE.redirect('manage_main')
1569:
1570: def reloadMetaDataFromStorage(self,RESPONSE=None):
1571: """copy metadata from the storage to ECHO"""
1572: ret=""
1573: resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'])
1574:
1575: for resource in resources:
1576:
1577: ret+=str(resource[1].copyIndex_meta2echo_resource())+"<br>"
1578:
1579:
1580: if RESPONSE is not None:
1581: # RESPONSE.redirect('manage_main')
1582: return ret
1583:
1.98 dwinter 1584: def getPartnerCopyright(self,name,sonst="generic"):
1585: """gibt generisches copyright eines partners aus, sonst behalte jetzige einsteillung"""
1586: #print "hi",name,sonst
1587: #print getattr(self.partners,name).copyrightType
1588: try:
1589: partner=getattr(self.partners,name)
1590: return partner.copyrightType
1591: except:
1592: print "error"
1593: return sonst
1594:
1595: def partnerSelector_HTML(self,selected=None):
1596: """give type selector"""
1597: if not selected:
1598: retStr="<option selected>\n"
1599: else:
1600: retStr="<option>\n"
1601:
1602: try: # erste version copyrightTypes exists
1603: for partner in self.credits:
1604: if selected and (partner==selected):
1605: retStr+="""<option selected value="%s">%s\n"""%(partner,partner)
1606: else:
1607: retStr+="""<option value="%s">%s\n"""%(partner,partner)
1608: except:
1609: """nothing"""
1610: return retStr
1611:
1.69 dwinter 1612: def getViewClassification(self):
1613: if hasattr(self,'viewClassification'):
1614: return self.viewClassification
1615: else:
1616: return ""
1.48 dwinter 1617:
1618: def getTitle(self):
1619: """title"""
1620: return self.title.encode('utf-8')
1621:
1622: def getLabel(self):
1623: """title"""
1624: return self.label.encode('utf-8')
1.1 casties 1625:
1.83 dwinter 1626:
1627:
1.45 dwinter 1628: def createRessourcesFromXMLForm(self):
1629: """form"""
1630: pt=PageTemplateFile('Products/ECHO_content/zpt/createRessourcesFromXMLForm.zpt').__of__(self)
1631: return pt()
1.83 dwinter 1632:
1.45 dwinter 1633: def createRessourcesFromXML(self,fileupload):
1634: """read an XML file for generating resources"""
1635: dom=xml.dom.minidom.parse(fileupload)
1636: ret="<h2>Added</h2>"
1637: for resource in dom.getElementsByTagName('resource'):
1638: link=getText(resource.getElementsByTagName('link')[0].childNodes)
1639: label=getText(resource.getElementsByTagName('label')[0].childNodes)
1640: #splitted=link.split("?")[0].split("/")
1641: #id=splitted[len(splitted)-1].encode('ascii')
1642: id=re.sub(" ","_",label).encode('ascii')
1643:
1644: ret+="<p>"+label+"</p>"
1.46 dwinter 1645: manage_addECHO_resource(self,id,label.encode('ascii'),label.encode('ascii'),"","","",link.encode('ascii'),"","")
1.45 dwinter 1646: return ret
1.25 dwinter 1647: def getImageTag(self):
1648: """GetTag"""
1649: try:
1650: return self.imageTag
1651: except:
1652: return ""
1653:
1.27 dwinter 1654: def addResource(self,id,title,label,description,contentType,responsible,link,metalink,weight,credits=None,coords=None,RESPONSE=None):
1.24 dwinter 1655: """SSS"""
1656: try:
1.123 dwinter 1657: manage_addECHO_resource(self,id,title,label,description,responsible,link,metalink,weight,credits=None,coords=None,RESPONSE=None)
1.24 dwinter 1658: return "done"
1659: except:
1660: return None
1.32 dwinter 1661:
1662: def getSecondaryLink(self):
1663: """secondary link"""
1664: try:
1665: return self.secondaryLink
1666: except:
1667: return ""
1668:
1669: def getSecondaryLinkTitle(self):
1670: """secondary link"""
1671: try:
1672: return self.secondaryLinkTitle
1673: except:
1674: return ""
1675:
1.24 dwinter 1676: def getCollectionTreeXML(self):
1677: """Tree as XML"""
1678:
1679: def getCollection(object,depth=0):
1680: depth+=1
1681: collections=""
1682: for entry in object.__dict__.keys():
1683: element=getattr(object,entry)
1684: try:
1.40 dwinter 1685: if element.meta_type in ["ECHO_collection","ECHO_group"]:
1.60 dwinter 1686: collections+="<element name=\""+quote(element.title)+"\" url=\""+element.absolute_url()+"\">"
1.24 dwinter 1687: collections+=getCollection(element,depth)+"</element>\n"
1688: except:
1689: """nothing"""
1690: return collections
1691:
1.60 dwinter 1692: ret="""<?xml version="1.0" encoding="utf-8" ?>"""
1693: return ret+"<collection>"+getCollection(self)+"</collection>"
1.24 dwinter 1694:
1.23 dwinter 1695: def createJavaScript(self):
1.88 casties 1696: """OLD CreateJava"""
1.72 casties 1697: ret=javaScriptMain
1.23 dwinter 1698:
1.65 casties 1699: dynamical="\n"
1.23 dwinter 1700: for ob in self.getGraphicCoords():
1.47 casties 1701: if ob[4][4] == "":
1.72 casties 1702: dynamical+="""Coords.push(new Coord('%s', Img, %s));\n"""%(ob[1],ob[0])
1703: else:
1704: dynamical+="""Coords.push(new Coord('%s', Img, %s));//%s\n"""%(ob[1],ob[0],ob[4][4])
1705: dynamical+="ShowArrow(new getObj('i.%s'),Img,%s);\n"%(ob[1],ob[0])
1706: ret+=javaHandler%dynamical
1707: return ret
1708:
1709: def createJSAreas(self):
1.88 casties 1710: """create area calls for JavaScript"""
1.72 casties 1711: dynamical="\n"
1712: for ob in self.getGraphicCoords():
1.74 casties 1713: if ob[5] == "area":
1.65 casties 1714: dynamical+="""addArea('%s', 'overview', %s, 'area');\n"""%(ob[1],ob[0])
1.47 casties 1715: else:
1.65 casties 1716: dynamical+="""addArea('%s', 'overview', %s, 'arrow');\n"""%(ob[1],ob[0])
1.72 casties 1717: return dynamical
1.74 casties 1718:
1719: def createMapHead(self):
1.88 casties 1720: """create javascript include and script tags for head"""
1.74 casties 1721: pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt/ECHO_content_map_frag_js')).__of__(self)
1722: return pt()
1.87 casties 1723:
1724: def createMapImg(self):
1725: """generate img-tag for map"""
1726: bt = BrowserCheck(self)
1727: tag = ""
1728: src = self.REQUEST['URL1'] + "/overview"
1729: if bt.isN4:
1730: tag += '<ilayer id="overview" visibility="show"><img src="%s"></ilayer>'%src
1731: else:
1732: tag += '<img id="overview" src="%s" />'%src
1733: return tag
1.74 casties 1734:
1735: def createMapLink(self, ob, text=None):
1736: """generate map link"""
1.87 casties 1737: bt = BrowserCheck(self)
1.74 casties 1738: id = ob[1]
1739: link = ob[1]
1740: if text == None:
1741: text = ob[2]
1.87 casties 1742: tag = ""
1743: if bt.isN4:
1744: tag += '<ilayer id="a.%s"><a onmouseover="highlightPair(\'%s\', true)" onmouseout="highlightPair(\'%s\', false)" href="%s" target="_blank"'%(id,id,id,link)
1745: tag += ">" + text + "</a></ilayer>"
1746: else:
1747: tag = '<a id="a.%s" onmouseover="highlightPair(\'%s\', true)" onmouseout="highlightPair(\'%s\', false)" href="%s" target="_blank"'%(id,id,id,link)
1748: if ob[3].contentType == 'text-popup':
1749: tag += ' title="%s"'%ob[3].description
1750: tag += ">" + text + "</a>"
1.74 casties 1751: return tag
1752:
1753: def createMapAux(self, ob, arrowsrc="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?dw=15&fn=icons/pfeil"):
1754: """generate map link image, text and other stuff"""
1755: id = ob[1]
1756: link = ob[1]
1757: vtype = ob[5]
1758: ctype = ob[3].contentType
1.87 casties 1759: bt = BrowserCheck(self)
1760: tag = ""
1761:
1762: if bt.isN4:
1763: tag += '<layer id="i.%s" onmouseover="highlightPair(\'%s\', true)" onmouseout="highlightPair(\'%s\', false)">'%(id,id,id)
1764: if vtype == "view point":
1765: rot = ob[4][4]
1766: tag += '<a href="%s"><img border="0" src="%s&rot=%s" /></a>'%(link,arrowsrc,rot)
1767: else:
1768: tag += '<a href="%s"><img border="0" width="1000" height="1000" src="trans_img"'%(link)
1769: if ctype == "text-popup":
1770: desc = ob[3].description
1771: tag += ' alt="%s"'%desc
1772: tag += ' /></a>'
1773: tag += '</layer>'
1.74 casties 1774: else:
1.87 casties 1775: tag = '<a id="b.%s" onmouseover="highlightPair(\'%s\', true)" onmouseout="highlightPair(\'%s\', false)" href="%s" target="_blank">'%(id,id,id,link)
1776: if vtype == "view point":
1777: rot = ob[4][4]
1778: if bt.isIEWin and bt.versIE > 5:
1779: tag += '<span id="i.%s" style="position:absolute; top:-100px; left:-100px; border-style:none; border-width=1px; filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'%s&rot=%s\');"><img style="visibility:hidden" src="%s&rot=%s" /></span>'%(id,arrowsrc,rot,arrowsrc,rot)
1780: else:
1781: tag += '<img id="i.%s" src="%s&rot=%s" border="1" style="position:absolute; top:-100px; left:-100px; border-style:none;" />'%(id,arrowsrc,rot)
1782: else:
1783: if bt.isIEWin:
1784: tag += '<div id="i.%s" style="position:absolute; top:-100px; left:-100px;background:url(area_img)"'%(id)
1785: else:
1786: tag += '<div id="i.%s" style="position:absolute; top:-100px; left:-100px;"'%(id)
1787: if ctype == "text-popup":
1788: desc = ob[3].description
1789: tag += ' title="%s"'%desc
1790: tag += '> </div>'
1791: tag += '</a>'
1.74 casties 1792: return tag
1793:
1.1 casties 1794:
1795: security.declarePublic('getCreditObject')
1796: def getCreditObject(self,name):
1797: """credit id to credititem"""
1.15 dwinter 1798: try:
1799: return getattr(self.partners,name)
1800: except:
1801: return ""
1.17 dwinter 1802:
1.1 casties 1803: security.declarePublic('ECHO_generateNavBar')
1804: def ECHO_generateNavBar(self):
1805: """Erzeuge Navigationsbar"""
1806: link=""
1807: object="self"
1808: ret=[]
1809: path=self.getPhysicalPath()
1810: for element in path:
1811:
1812:
1813: if not element=="":
1814: object+="."+element
1815:
1816: label=eval(object).label
1817: link+="/"+element
1818: if not label=="":
1819: ret.append((label,link))
1820: return ret
1821:
1822: security.declarePublic('ECHO_rerenderLinksMD')
1.73 dwinter 1823:
1.49 dwinter 1824: def ECHO_rerenderLinksMD(self,obj=None):
1.1 casties 1825: """Rerender all Links"""
1.130 dwinter 1826: ret=""
1827:
1.49 dwinter 1828: if not obj:
1829: obj = self
1.1 casties 1830:
1.49 dwinter 1831: entries=obj.ZopeFind(obj,obj_metatypes=['ECHO_resource','ECHO_collection'])
1832:
1833: for entry in entries:
1834: if entry[1].meta_type == 'ECHO_resource':
1.130 dwinter 1835: try:
1836: entry[1].ECHO_getResourceMD(template="no")
1837: entry[1].generate_title()
1838: entry[1].generate_label()
1839: ret+="OK:"+entry[0]+"-- "+entry[1].getLabel().decode('utf-8')+"-- "+entry[1].getTitle().decode('utf-8')+"<br>"
1840: except:
1841: ret+="Error:"+entry[0]+"<br>"
1.91 dwinter 1842:
1.49 dwinter 1843: else:
1844: self.ECHO_rerenderLinksMD(entry[1])
1845:
1.1 casties 1846:
1847:
1.130 dwinter 1848: return ret+"Rerenderd all links to resources in: "+self.title
1.19 dwinter 1849:
1850: security.declarePublic('ECHO_newViewerLink')
1.1 casties 1851:
1852:
1853: def getCoords(self):
1854: try:
1.11 dwinter 1855:
1856: x= [string.join(x,",") for x in self.coords]
1857: return x
1.4 dwinter 1858:
1.11 dwinter 1859: except:
1.4 dwinter 1860:
1.1 casties 1861: return []
1.3 dwinter 1862:
1.34 dwinter 1863: def __init__(self,id,title,label,description,contentType,responsible,credits,weight,sortfield,coords,secondaryLinkTitle,secondaryLink,imageTag="",bgcolour=""):
1.91 dwinter 1864:
1.1 casties 1865:
1866: self.id = id
1867: """Festlegen der ID"""
1868: self.credits=toList(credits)
1869: self.label = label
1870: self.title=title
1871: self.description=description
1.27 dwinter 1872: self.contentType=contentType
1.1 casties 1873: self.responsible=responsible
1.25 dwinter 1874: self.imageTag=imageTag
1.1 casties 1875: self.weight=weight
1876: self.sortfield=sortfield
1877: coordsnew=[ string.split(x,",") for x in coords]
1878: self.coords=coordsnew
1.32 dwinter 1879: self.secondaryLinkTitle=secondaryLinkTitle
1880: self.secondaryLink=secondaryLink
1.35 dwinter 1881: self.bgcolour=bgcolour
1.32 dwinter 1882:
1.1 casties 1883:
1884: manage_options = Folder.manage_options+(
1.13 dwinter 1885: {'label':'Main Config','action':'ECHO_collection_config'},
1.1 casties 1886: {'label':'Rerender Links','action':'ECHO_rerenderLinksMD'},
1887: {'label':'Graphics','action':'ECHO_graphicEntry'},
1.45 dwinter 1888: {'label':'create resources from XML','action':'createRessourcesFromXMLForm'},
1.123 dwinter 1889: {'label':'Change Viewer Templates','action':'changeViewerTemplateSetsForm'},
1.130 dwinter 1890: {'label':'Reload Metadata','action':'reloadMetaDataFromStorage'},
1891: {'label':'ImportCollection','action':'updateCollection'},
1892: {'label':'Copy MD for indexing and search','action':'copySearchFields'},
1.1 casties 1893: )
1894:
1.19 dwinter 1895: def getOverview(self):
1896: """overview graphics"""
1.20 dwinter 1897:
1898: return self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['overview'])[0][1]
1899:
1.19 dwinter 1900:
1.1 casties 1901: def ECHO_graphicEntry(self):
1902: """DO nothing"""
1.20 dwinter 1903: overview = self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['overview'])
1.19 dwinter 1904:
1.20 dwinter 1905:
1.19 dwinter 1906: if overview:
1.13 dwinter 1907: pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_draw.zpt').__of__(self)
1.1 casties 1908: return pt()
1909: else:
1910: return "NO OVERVIEW GRAPHICS"
1911:
1.4 dwinter 1912: def ECHO_enterCoords(self,coordstr,angle="",RESPONSE=None):
1.1 casties 1913: """Enter coords"""
1.2 dwinter 1914: coords=self.coords
1.4 dwinter 1915: temco=coordstr.split(",")
1916: temco.append(angle)
1917: coords.append(temco)
1.2 dwinter 1918: self.coords=coords[0:]
1.13 dwinter 1919:
1.2 dwinter 1920: if RESPONSE is not None:
1921: RESPONSE.redirect('ECHO_graphicEntry')
1.1 casties 1922:
1923:
1.13 dwinter 1924: security.declarePublic('ECHO_collection_config')
1925: def ECHO_collection_config(self):
1.1 casties 1926: """Main configuration"""
1927:
1928: if not hasattr(self,'weight'):
1929: self.weight=""
1930:
1931: if not hasattr(self,'sortfield'):
1932: self.sortfield="weight"
1.13 dwinter 1933:
1.1 casties 1934: if not hasattr(self,'coords'):
1935: self.coords=[]
1936:
1.13 dwinter 1937: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_collection.zpt').__of__(self)
1.1 casties 1938: return pt()
1939:
1940:
1.13 dwinter 1941: security.declarePublic('changeECHO_collection')
1.1 casties 1942:
1.10 dwinter 1943:
1.34 dwinter 1944: def getBgcolour(self):
1945: """colour"""
1946: if hasattr(self,'bgcolour') and not (self.bgcolour==""):
1947: return self.bgcolour
1948: else:
1949: return "#dddddd"
1950:
1.105 dwinter 1951: def changeECHO_collection(self,title,label,description,contentType,responsible,weight,secondaryLink,secondaryLinkTitle,credits=None,sortfield="weight",coords=None,RESPONSE=None,imageTag="",bgcolour="",viewClassification=None,location=None):
1.71 casties 1952: """Aenderung der Properties"""
1.10 dwinter 1953:
1.32 dwinter 1954: self.secondaryLink=secondaryLink
1955: self.secondaryLinkTitle=secondaryLinkTitle
1.25 dwinter 1956: self.imageTag=imageTag
1.34 dwinter 1957: self.bgcolour=bgcolour
1.69 dwinter 1958: self.viewClassification=viewClassification
1.105 dwinter 1959: self.location=location
1.34 dwinter 1960:
1.32 dwinter 1961: if coords:
1962: coordsnew=[ string.split(x,",") for x in coords]
1963: self.coords=coordsnew[0:]
1964: else:
1965: coordsnew=None
1966: self.coords=None
1967:
1968: setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordsnew)
1.44 dwinter 1969: try:
1970: self.coords=coordsnew[0:] # HACK fehler in setECHO_collection
1971: except:
1972: """none"""
1973:
1.1 casties 1974: self.sortfield=sortfield
1975:
1976: if RESPONSE is not None:
1977: RESPONSE.redirect('manage_main')
1978:
1.23 dwinter 1979:
1980: def showOverview(self):
1981: """overview"""
1982: if 'ECHO_overview.html' in self.__dict__.keys():
1983: return getattr(self,'ECHO_overview.html')()
1984: pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_content_overview.zpt').__of__(self)
1985: return pt()
1986:
1.84 dwinter 1987: security.declareProtected('View','index_html')
1.1 casties 1988:
1989: def index_html(self):
1990: """standard page"""
1991:
1992: if 'index.html' in self.__dict__.keys():
1993: return getattr(self,'index.html')()
1.32 dwinter 1994:
1.1 casties 1995: elif 'overview' in self.__dict__.keys():
1996: return self.showOverview()
1.32 dwinter 1997: elif hasattr(self,'collection_index_template'):
1998: return self.collection_index_template()
1.54 dwinter 1999: elif hasattr(self,'main_index_template'):
1.55 dwinter 2000: return self.main_index_template()
1.1 casties 2001:
1.54 dwinter 2002: pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_main_index_template_standard.zpt').__of__(self)
1.29 dwinter 2003: pt.content_type="text/html"
1.1 casties 2004: return pt()
2005:
1.29 dwinter 2006: def content_html(self):
2007: """template fuer content"""
2008: return content_html(self,'collection')
2009:
1.11 dwinter 2010: def getCredits(self):
2011: """Ausgabe der credits"""
2012: if self.credits:
2013: return self.credits
2014: else:
2015: return []
1.1 casties 2016:
1.65 casties 2017: def area_img(self):
2018: """area image"""
1.88 casties 2019: bt = BrowserCheck(self)
1.89 casties 2020: if bt.isIE or bt.isN4:
1.88 casties 2021: return sendFile(self, 'images/red.gif', 'image/gif')
2022: else:
2023: return sendFile(self, 'images/reda.png', 'image/png')
1.87 casties 2024:
2025: def trans_img(self):
2026: """empty image"""
2027: return sendFile(self, 'images/trans.gif', 'image/gif')
1.65 casties 2028:
2029: def hl_lib_js(self):
2030: """javascript"""
1.79 casties 2031: return sendFile(self, 'js/hl_lib.js', 'text/plain')
1.65 casties 2032:
2033: def js_lib_js(self):
2034: """javascript"""
1.79 casties 2035: return sendFile(self, 'js/js_lib.js', 'text/plain')
1.23 dwinter 2036:
1.1 casties 2037: def getGraphicCoords(self):
2038: """Give list of coordinates"""
1.68 casties 2039: subColTypes=['ECHO_collection','ECHO_resource']
1.1 casties 2040: ids=[]
1.67 casties 2041: for entrySearch in self.ZopeFind(self,obj_metatypes=subColTypes):
1.66 dwinter 2042: object=entrySearch[1]
2043: if hasattr(object,'coords'):
2044: for coordtemp in object.coords:
2045: if len(coordtemp)>3:
2046: coord=coordtemp[0:4]
2047: label=""
1.70 casties 2048: vc=""
1.66 dwinter 2049: if hasattr(object,'label') and not object.label=="":
2050: label=object.label
2051: elif hasattr(object,'title') and not object.title=="":
2052: label=object.title
2053: else:
2054: label=object.getId()
1.70 casties 2055: if object.viewClassification != "":
2056: vc=object.viewClassification
2057: else:
2058: if len(coordtemp) > 4 and coordtemp[4] != "":
2059: vc="view point"
2060: else:
2061: vc="area"
2062: ids.append([string.join(coord,", "),object.getId(),label,object,coordtemp,vc])
1.1 casties 2063: return ids
2064:
1.42 dwinter 2065:
2066:
2067:
1.41 dwinter 2068: getSubCols = ECHO_helpers.getSubCols
1.84 dwinter 2069:
2070: Globals.InitializeClass(ECHO_collection)
1.1 casties 2071:
1.13 dwinter 2072: def manage_addECHO_collectionForm(self):
2073: """Add collection form"""
2074: pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_collectionForm.zpt').__of__(self)
1.1 casties 2075: return pt()
2076:
2077:
1.34 dwinter 2078: def manage_addECHO_collection(self,id,title,label,description,contentType,responsible,weight,sortfield,coords="",secondaryLinkTitle="",secondaryLink="",credits=None,RESPONSE=None,imageTag="",bgcolour=""):
1.13 dwinter 2079: """add a echo collection"""
1.1 casties 2080:
2081:
1.34 dwinter 2082: newObj=ECHO_collection(id,title,label,description,contentType,responsible,credits,weight,sortfield,coords,secondaryLinkTitle=secondaryLinkTitle,secondaryLink=secondaryLink,imageTag=imageTag,bgcolour="")
1.1 casties 2083:
2084: self._setObject(id,newObj)
1.13 dwinter 2085:
1.1 casties 2086: if RESPONSE is not None:
2087: RESPONSE.redirect('manage_main')
2088:
1.38 dwinter 2089: class ECHO_group(ECHO_collection):
2090: """ECHO Gruppe"""
1.84 dwinter 2091: security=ClassSecurityInfo()
1.38 dwinter 2092: meta_type="ECHO_group"
2093:
2094: manage_options = Folder.manage_options+(
2095: {'label':'Main Config','action':'ECHO_group_config'},
2096: {'label':'Rerender Links','action':'ECHO_rerenderLinksMD'},
2097: {'label':'Graphics','action':'ECHO_graphicEntry'},
2098: )
1.84 dwinter 2099:
2100: security.declareProtected('View','index_html')
1.52 dwinter 2101: def index_html(self):
2102: """standard page"""
2103: displayedObjects=self.ZopeFind(self,obj_metatypes=displayTypes)
1.61 dwinter 2104: #if (len(displayedObjects)==1) and (displayedObjects[0][1].meta_type=="ECHO_collection"): # nur ein Object dann redirect auf dieses Object
2105: # return self.REQUEST.RESPONSE.redirect(displayedObjects[0][1].absolute_url())
1.52 dwinter 2106:
2107: if 'index.html' in self.__dict__.keys():
2108: return getattr(self,'index.html')()
1.56 dwinter 2109:
1.52 dwinter 2110: elif 'overview' in self.__dict__.keys():
1.56 dwinter 2111: return self.showOverview()
1.52 dwinter 2112: elif hasattr(self,'group_index_template'):
1.56 dwinter 2113: return self.group_index_template()
2114: elif hasattr(self,'collection_index_template'):
2115: return self.collection_index_template()
1.54 dwinter 2116: elif hasattr(self,'main_index_template'):
1.55 dwinter 2117: return self.main_index_template()
1.52 dwinter 2118:
1.54 dwinter 2119: pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_main_index_template_standard.zpt').__of__(self)
1.52 dwinter 2120: pt.content_type="text/html"
2121: return pt()
2122:
1.38 dwinter 2123: def ECHO_group_config(self):
2124: """Main configuration"""
2125:
2126: if not hasattr(self,'weight'):
2127: self.weight=""
2128:
2129: if not hasattr(self,'sortfield'):
2130: self.sortfield="weight"
2131:
2132: if not hasattr(self,'coords'):
2133: self.coords=[]
2134:
2135: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_group.zpt').__of__(self)
2136: return pt()
2137:
1.43 dwinter 2138: def changeECHO_group(self,title,label,description,contentType,responsible,weight,secondaryLink,secondaryLinkTitle,credits=None,sortfield="weight",coords=None,RESPONSE=None,imageTag="",bgcolour="",logo=""):
1.38 dwinter 2139: """Änderung der Properties"""
2140:
2141: self.secondaryLink=secondaryLink
2142: self.secondaryLinkTitle=secondaryLinkTitle
2143: self.imageTag=imageTag
2144: self.bgcolour=bgcolour
1.43 dwinter 2145: self.logo=logo
2146:
1.38 dwinter 2147: if coords:
2148: coordsnew=[ string.split(x,",") for x in coords]
2149: self.coords=coordsnew[0:]
2150: else:
2151: coordsnew=None
2152: self.coords=None
2153:
2154: setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordsnew)
2155:
2156:
2157:
2158: self.sortfield=sortfield
2159:
2160: if RESPONSE is not None:
2161: RESPONSE.redirect('manage_main')
1.40 dwinter 2162:
2163: def getLogo(self):
2164: """logo ausgeben"""
1.43 dwinter 2165: try:
2166: return self.logo
2167: except:
2168: return "ECHO_groups"
1.40 dwinter 2169:
1.38 dwinter 2170: def content_html(self):
2171: """template fuer content"""
2172: return content_html(self,'group')
2173:
2174:
2175:
2176: def manage_addECHO_groupForm(self):
2177: """Add group form"""
2178: pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_groupForm.zpt').__of__(self)
2179: return pt()
2180:
2181:
1.43 dwinter 2182: 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 2183: """add a echo group"""
2184:
2185:
2186: newObj=ECHO_group(id,title,label,description,contentType,responsible,credits,weight,sortfield,coords,secondaryLinkTitle=secondaryLinkTitle,secondaryLink=secondaryLink,imageTag=imageTag,bgcolour="")
2187:
1.43 dwinter 2188: setattr(newObj,'logo',logo)
1.38 dwinter 2189: self._setObject(id,newObj)
1.43 dwinter 2190:
1.38 dwinter 2191: if RESPONSE is not None:
2192: RESPONSE.redirect('manage_main')
2193:
1.84 dwinter 2194: Globals.InitializeClass(ECHO_group)
1.85 dwinter 2195:
2196:
2197: class ECHO_userFolder(UserFolder):
2198: """User folder for Intranet"""
2199: _domain_auth_mode=1 # Identification via domain
2200: meta_type="ECHO_userFolder"
1.38 dwinter 2201:
1.85 dwinter 2202: def authenticate(self, name, password, request):
2203: emergency = self._emergency_user
2204: if name is None:
2205: return None
2206: if emergency and name==emergency.getUserName():
2207: user = emergency
2208: else:
2209: user = self.getUser(name)
2210: if user is not None and user.authenticate(password, request):
2211: return user
2212: else:
2213: return None
2214:
2215: def domainSpecMatch(self,spec, request):
2216: host=''
2217: addr=''
2218:
2219: # Fast exit for the match-all case
2220: if len(spec) == 1 and spec[0] == '*':
2221: return 1
2222:
2223: if request.has_key('REMOTE_HOST'):
2224: host=request['REMOTE_HOST']
2225:
2226: if request.has_key('REMOTE_ADDR'):
2227: addr=request['REMOTE_ADDR']
2228:
2229: if request.has_key('HTTP_X_FORWARDED_FOR'):
2230: addr=request['HTTP_X_FORWARDED_FOR']
2231:
2232:
2233: if not host and not addr:
2234: return 0
2235:
2236: if not host:
2237: try: host=socket.gethostbyaddr(addr)[0]
2238: except: pass
2239: if not addr:
2240: try: addr=socket.gethostbyname(host)
2241: except: pass
2242:
2243:
2244: _host=host.split('.')
2245: _addr=addr.split('.')
2246: _hlen=len(_host)
2247: _alen=len(_addr)
2248:
2249: for ob in spec:
2250: sz=len(ob)
2251: _ob=ob.split('.')
2252: _sz=len(_ob)
2253:
2254: mo = addr_match(ob)
2255: if mo is not None:
2256: if mo.end(0)==sz:
2257: fail=0
2258: for i in range(_sz):
2259: a=_addr[i]
2260: o=_ob[i]
2261: if (o != a) and (o != '*'):
2262: fail=1
2263: break
2264: if fail:
2265: continue
2266: return 1
2267:
2268: mo = host_match(ob)
2269: if mo is not None:
2270: if mo.end(0)==sz:
2271: if _hlen < _sz:
2272: continue
2273: elif _hlen > _sz:
2274: _item=_host[-_sz:]
2275: else:
2276: _item=_host
2277: fail=0
2278: for i in range(_sz):
2279: h=_item[i]
2280: o=_ob[i]
2281: if (o != h) and (o != '*'):
2282: fail=1
2283: break
2284: if fail:
2285: continue
2286: return 1
2287: return 0
2288:
2289: Globals.default__class_init__(ECHO_userFolder)
2290:
2291:
2292:
2293: def manage_addECHO_userFolder(self,dtself=None,REQUEST=None,**ignored):
2294: """add a user folder """
2295: f=ECHO_userFolder()
2296: self=self.this()
2297: try: self._setObject('acl_users', f)
2298: except: return MessageDialog(
2299: title ='Item Exists',
2300: message='This object already contains a User Folder',
2301: action ='%s/manage_main' % REQUEST['URL1'])
2302: self.__allow_groups__=f
2303: if REQUEST is not None:
2304: REQUEST['RESPONSE'].redirect(self.absolute_url()+'/manage_main')
2305:
2306: def manage_addECHO_userFolderForm(self):
2307: """add a user folder form"""
2308: return manage_addECHO_userFolder(self)
2309:
1.1 casties 2310: class ECHO_root(Folder,Persistent,Implicit):
2311: """ECHO Root Folder"""
1.85 dwinter 2312:
2313: security=ClassSecurityInfo()
2314:
1.1 casties 2315: meta_type="ECHO_root"
1.90 dwinter 2316:
1.130 dwinter 2317: def showContent(self,path):
2318: """return content/html"""
2319:
2320: return urllib.urlopen(path+"/content_html").read()
2321:
2322: def getImageViewers(self):
2323: """images"""
2324: viewers=self.ZopeFind(self.standardImageViewer,obj_metatypes=['OSAS_ViewerObject'])
2325: return viewers
2326:
1.90 dwinter 2327:
2328: def getBibTag(self,tag,content):
2329: """get field tag für index-meta-generation"""
2330: if not content or content=="":
2331: return ""
2332: ret="<%s>"%tag
1.95 dwinter 2333: #ret+=urllib.quote(content)
2334: ret+=content
2335:
1.90 dwinter 2336: ret+="</%s>"%tag
2337: return ret
2338:
2339: def getValueFromClass(self,field,found):
2340: """retattribute falss existing"""
2341: try:
1.95 dwinter 2342:
2343: return getattr(found,field).decode('ascii','ignore')
1.90 dwinter 2344: except:
2345: return ""
1.49 dwinter 2346:
2347: def getImageTag(self):
2348: """needed by main_template"""
2349: return ""
2350: secondaryLink="" #needed by main_template
2351: secondaryLinkTitle="" #needed by main_template
2352:
1.35 dwinter 2353: def getBgcolour(self):
2354: """hack"""
2355: return "#dddddd"
1.28 dwinter 2356:
2357: def contentTypeSelector_HTML(self,selected=None):
2358: """give type selector"""
2359: if not selected:
2360: retStr="<option selected>\n"
2361: else:
2362: retStr="<option>\n"
2363:
1.62 dwinter 2364: try: # erste version contentTypes exists
1.73 dwinter 2365: for contentType in self.ZopeFind(self.contentTypes,obj_metatypes=["ECHO_contentType","OSAS_MetadataMapping"]):
1.28 dwinter 2366: if selected and (contentType[0]==selected):
2367: retStr+="""<option selected value="%s">%s\n"""%(contentType[0],contentType[0])
2368: else:
2369: retStr+="""<option value="%s">%s\n"""%(contentType[0],contentType[0])
2370: except:
1.62 dwinter 2371: try:
2372: for contentType in self.ZopeFind(self.standardMD,obj_metatypes=["OSAS_MetadataMapping"]):
2373: if selected and (contentType[0]==selected):
2374: retStr+="""<option selected value="%s">%s\n"""%(contentType[0],contentType[0])
2375: else:
2376: retStr+="""<option value="%s">%s\n"""%(contentType[0],contentType[0])
2377: except:
2378: """nothing"""
2379:
1.73 dwinter 2380: return retStr
2381:
2382: def renderingTypeSelector_HTML(self,selected=None):
2383: """give type selector"""
2384: if not selected:
2385: retStr="<option selected>\n"
2386: else:
2387: retStr="<option>\n"
2388:
2389: try: # erste version renderingTypes exists
2390: for renderingType in self.ZopeFind(self.renderingTypes,obj_metatypes=["ECHO_renderingType"]):
2391: if selected and (renderingType[0]==selected):
2392: retStr+="""<option selected value="%s">%s\n"""%(renderingType[0],renderingType[0])
2393: else:
2394: retStr+="""<option value="%s">%s\n"""%(renderingType[0],renderingType[0])
2395: except:
2396: """nothing"""
2397: return retStr
2398:
2399: def renderingTypeSelector_HTML(self,selected=None):
2400: """give type selector"""
2401: if not selected:
2402: retStr="<option selected>\n"
2403: else:
2404: retStr="<option>\n"
2405:
2406: try: # erste version renderingTypes exists
2407: for renderingType in self.ZopeFind(self.renderingTypes,obj_metatypes=["ECHO_renderingType"]):
2408: if selected and (renderingType[0]==selected):
2409: retStr+="""<option selected value="%s">%s\n"""%(renderingType[0],renderingType[0])
2410: else:
2411: retStr+="""<option value="%s">%s\n"""%(renderingType[0],renderingType[0])
2412: except:
2413: """nothing"""
2414: return retStr
2415:
2416:
1.104 dwinter 2417: def copyrightTypeSelector_HTML(self,selected=None,first=None):
1.73 dwinter 2418: """give type selector"""
1.104 dwinter 2419:
2420: if not first:
2421: if not selected:
2422: retStr="<option selected>\n"
2423: else:
2424: retStr="<option>\n"
1.73 dwinter 2425: else:
1.104 dwinter 2426: if not selected:
2427: retStr="""<option selected value="%s">%s\n"""%first
2428: else:
2429: retStr="""<option value="%s">%s\n"""%first
1.98 dwinter 2430:
2431:
2432: try: # erste version copyrightTypes exists
2433: for copyrightType in self.ZopeFind(self.copyrightTypes,obj_metatypes=["ECHO_copyrightType"]):
2434: if selected and (copyrightType[0]==selected):
2435: retStr+="""<option selected value="%s">%s\n"""%(copyrightType[0],copyrightType[0])
2436: else:
2437: retStr+="""<option value="%s">%s\n"""%(copyrightType[0],copyrightType[0])
2438: except:
2439: """nothing"""
2440: return retStr
2441:
2442: def partnerSelector_HTML(self,selected=None):
2443: """give type selector"""
2444: if not selected:
2445: retStr="<option selected>\n"
2446: else:
2447: retStr="<option>\n"
1.73 dwinter 2448:
2449: try: # erste version copyrightTypes exists
1.98 dwinter 2450: for copyrightType in self.ZopeFind(self.partners,obj_metatypes=["ECHO_partner"]):
1.73 dwinter 2451: if selected and (copyrightType[0]==selected):
2452: retStr+="""<option selected value="%s">%s\n"""%(copyrightType[0],copyrightType[0])
2453: else:
2454: retStr+="""<option value="%s">%s\n"""%(copyrightType[0],copyrightType[0])
2455: except:
2456: """nothing"""
2457: return retStr
1.98 dwinter 2458:
2459: mediaTypes=['all','text','images','sound','video'] # konfigurierbar in neuer version über echoroot??
2460:
2461: def mediaTypeSelector_HTML(self,selected=None):
2462: """give type selector"""
2463: if not selected:
2464: retStr="<option selected>\n"
2465: else:
2466: retStr="<option>\n"
2467:
2468: try: # erste version mediatypesTypes exists
2469: for mediaType in self.mediaTypes:
2470: if selected and (mediaType in selected):
2471: retStr+="""<option selected value="%s">%s\n"""%(mediaType,mediaType)
2472: else:
2473: retStr+="""<option value="%s">%s\n"""%(mediaType,mediaType)
2474: except:
2475: """nothing"""
2476: return retStr
1.73 dwinter 2477:
1.28 dwinter 2478:
1.27 dwinter 2479: def patchContentType(self,obj=None):
2480: """austauschen content_type with contentType (patch bei umstieg von alter Version)"""
2481:
2482:
2483: if not obj:
2484: obj = self
2485:
1.30 dwinter 2486: entries=obj.ZopeFind(obj,obj_metatypes=['ECHO_resource','ECHO_collection','ECHO_externalLink','ECHO_pageTemplate'])
1.27 dwinter 2487:
2488: for entry in entries:
1.31 dwinter 2489: setattr(entry[1],'contentType',entry[1].content_type)
2490: #entry[1].contentType == entry[1].content_type
1.27 dwinter 2491:
2492: if entry[1].meta_type == 'ECHO_collection':
2493: entry[1].patchContentType(entry[1])
1.19 dwinter 2494:
1.27 dwinter 2495:
1.49 dwinter 2496: return "changed all contenttypes in: "+self.title
1.63 dwinter 2497:
2498:
2499: def patchViewClassification(self,obj=None):
2500: """setze viewClassification heuristisch"""
2501:
2502: def checkIfArrow(obj):
2503: if hasattr(obj,'coords'):
2504: for coordtemp in obj.coords:
1.91 dwinter 2505:
1.64 dwinter 2506: if (len(coordtemp)>4) and not (coordtemp[4]==''):
1.63 dwinter 2507: return 4
2508: return None
2509: return None
2510:
2511: if not obj:
2512: obj = self
2513:
2514: entries=obj.ZopeFind(obj,obj_metatypes=['ECHO_resource','ECHO_collection','ECHO_group'])
2515:
2516: for entry in entries:
2517:
1.64 dwinter 2518: if checkIfArrow(entry[1]):
1.63 dwinter 2519: setattr(entry[1],'viewClassification','view point')
2520: else:
2521: setattr(entry[1],'viewClassification','area')
2522:
2523: #entry[1].contentType == entry[1].content_type
2524:
2525: if entry[1].meta_type in ['ECHO_collection','ECHO_group']:
2526: entry[1].patchViewClassification(entry[1])
2527:
2528:
2529: return "changed all contenttypes in: "+self.title
2530:
1.19 dwinter 2531: def ECHO_newViewerLink(self,obj=None):
2532: """change links (:86 faellt weg)"""
2533:
2534: if not obj:
2535: obj = self
2536:
2537: entries=obj.ZopeFind(obj,obj_metatypes=['ECHO_resource','ECHO_collection'])
2538:
2539: for entry in entries:
2540:
2541: if entry[1].meta_type == 'ECHO_resource':
2542:
2543: entry[1].link=re.sub('\:86','',entry[1].link)
2544:
2545: else:
2546:
2547: entry[1].ECHO_newViewerLink(entry[1])
2548:
2549: return "Rerenderd all links to resources in: "+self.title
1.1 casties 2550:
2551: def __init__(self,id,title):
2552: """init"""
2553: self.id = id
2554: self.title=title
1.13 dwinter 2555:
1.14 dwinter 2556: def deleteSpace(self,str):
2557: """delete space at the end of a line"""
2558: if str[len(str)-1]==" ":
2559: return str[0:len(str)-1]
2560: else:
2561: return str
2562:
2563:
2564:
2565: # zusaetliche methoden fuer das vlp muessen in ein eigenes produkt
2566:
2567: def formatAscii(self,str,url=None):
2568: """ersetze ascii umbrueche durch <br>"""
2569: #url=None
2570: if url:
2571:
2572: retStr=""
2573: words=str.split("\n")
2574:
2575: for word in words:
2576: strUrl=url%word
1.91 dwinter 2577:
1.14 dwinter 2578: retStr+="""<a href="%s">%s</a><br/>"""%(strUrl,word)
2579: str=retStr
2580: if str:
2581: return re.sub(r"[\n]","<br/>",str)
2582: else:
2583: return ""
2584:
2585: def link2html(self,str):
2586: """link2html fuer VLP muss hier noch raus"""
2587: if str:
1.91 dwinter 2588:
1.14 dwinter 2589: str=re.sub("\&","&",str)
1.108 dwinter 2590: dom=xml.dom.minidom.parseString("<?xml version='1.0' encoding='utf-8'?><txt>"+str+"</txt>")
1.14 dwinter 2591: links=dom.getElementsByTagName("link")
2592:
1.91 dwinter 2593:
1.14 dwinter 2594: for link in links:
2595: link.tagName="a"
2596: ref=link.getAttribute("ref")
2597: if self.checkRef(ref):
2598: link.setAttribute("href",self.aq_parent.absolute_url()+"/vlp_coll?id="+ref)
2599:
1.113 dwinter 2600: newxml=dom.toxml('utf-8')
2601: match=re.sub(r'<\?xml version=\"1.0\" encoding=\"utf-8\"\?>\n<txt>','',newxml)
2602: match=re.sub(r'</txt>','',match)
2603:
2604: return match
2605:
1.14 dwinter 2606: return ""
2607:
1.110 dwinter 2608: def xml2html(self,str):
2609: """link2html fuer VLP muss hier noch raus"""
2610: if str:
2611:
2612: str=re.sub("\&","&",str)
2613: dom=xml.dom.minidom.parseString(str)
2614: links=dom.getElementsByTagName("link")
2615:
2616:
2617: for link in links:
2618: link.tagName="a"
2619: ref=link.getAttribute("ref")
2620: if self.checkRef(ref):
2621: link.setAttribute("href",self.aq_parent.absolute_url()+"/vlp_coll?id="+ref)
2622:
2623: return dom.toxml('utf-8')
2624: return ""
1.14 dwinter 2625:
2626: def checkRef(self,ref):
2627: dbs={'vl_literature':'AND CD LIKE \'%lise%\'','vl_technology':'','vl_people':''}
2628: res=None
2629: for db in dbs.keys():
2630:
2631: res=res or self.search(var=str("select reference from %s where reference =\'%s\' %s"%(db,ref,dbs[db])))
2632: return res
2633:
2634: #Ende Methode fuer vlp
2635:
1.13 dwinter 2636: def PgQuoteString(self,string):
2637: """Quote string"""
1.91 dwinter 2638:
1.13 dwinter 2639: return libpq.PgQuoteString(string)
1.1 casties 2640:
2641: def getPartners(self):
2642: """Get list of Partners. Presently only from a subfolder partners"""
1.26 dwinter 2643:
2644: return [ item[1] for item in self.partners.ZopeFind(self.partners,obj_metatypes=['ECHO_partner'])]
1.13 dwinter 2645:
1.1 casties 2646:
1.26 dwinter 2647:
1.1 casties 2648:
1.24 dwinter 2649:
1.26 dwinter 2650: def getPartnersXML(self):
2651: """partner liste als xml"""
2652: partners=self.getPartners()
1.60 dwinter 2653: ret="""<?xml version="1.0" encoding="utf-8" ?>
2654: <partners>"""
2655:
2656: for partner in partners:
2657: ret+="""<partner id="%s" title="%s"/>\n"""%(partner.getId(),unicode(partner.title,'utf-8','replace'))
1.26 dwinter 2658:
2659: return ret+"\n</partners>"
1.24 dwinter 2660:
1.1 casties 2661: def getCollectionTree(self):
2662: """get the collection tree (list of triples (parent,child, depth)"""
2663:
2664: def getCollection(object,depth=0):
2665: depth+=1
2666: collections=[]
2667: for entry in object.__dict__.keys():
2668: element=getattr(object,entry)
2669: try:
2670: if element.meta_type=="ECHO_collection":
2671: collections.append((object,element,depth))
2672: collections+=getCollection(element,depth)
2673: except:
2674: """nothing"""
2675: return collections
2676:
2677:
2678: return getCollection(self)
2679:
2680: def getCollectionTreeIds(self):
2681: """Show the IDs of the Tree"""
2682: ret=[]
2683: for collection in self.getCollectionTree():
2684: ret.append((collection[0].getId(),collection[1].getId(),collection[2]))
2685: return ret
2686:
1.82 dwinter 2687: def getResourcesHTML(self,viewerType=None,filter=None):
2688: """gebe all ressourcen aus"""
1.81 dwinter 2689:
1.82 dwinter 2690: def sortHTML(x,y):
2691: return cmp(x[1].title,y[1].title)
2692:
2693: ret="""<html><body><h2>Resources in ECHO</h3>"""
2694:
2695: resources = self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1)
2696: ret+="""<h3>Found %i resources</h3>"""%len(resources)
2697: resources.sort(sortHTML)
2698: for resource in resources:
2699: echo_url=resource[1].absolute_url()
2700:
2701: if hasattr(resource[1],'title'):
2702: title=resource[1].title
2703: else:
2704: title="None"
2705: if filter:
2706: if re.search(filter,title):
2707: ret+="""\n<p><a href="%s">%s</a></p>"""%(echo_url,title)
2708: else:
2709: ret+="""\n<p><a href="%s">%s</a></p>"""%(echo_url,title)
2710:
2711: ret +="""\n</body></html>"""
2712:
2713: #self.REQUEST.RESPONSE.setHeader("Content-Type", "text/html")
2714: #self.REQUEST.RESPONSE.write(ret)
2715: return ret
2716:
1.81 dwinter 2717: def getResourcesXML(self,viewerType=None,filter=None):
2718: """gebe all ressourcen aus"""
2719: ret="""<?xml version="1.0" ?>
2720: <index>"""
2721: for resource in self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1):
2722:
2723: echo_url=resource[1].absolute_url()
2724: if hasattr(resource[1],'link'):
2725: viewer_url=resource[1].link
2726: else:
2727: viewer_url="NO URL"
2728: if filter:
2729: if re.search(filter,viewer_url):
2730: ret+="""\n<resource echoLink="%s" viewerLink="%s"/>"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(viewer_url,safe='/:?'))
2731: else:
2732: ret+="""\n<resource echoLink="%s" viewerLink="%s"/>"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(viewer_url,safe='/:?'))
2733: ret +="""\n</index>"""
2734:
2735: self.REQUEST.RESPONSE.setHeader("Content-Type", "text/xml")
2736: self.REQUEST.RESPONSE.write(ret)
1.83 dwinter 2737:
2738: def getFullTextsXML(self,viewerType=None,filter=None):
2739: """gebe all ressourcen aus"""
2740: ret="""<?xml version="1.0" ?>
2741: <index>"""
2742: for resource in self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1):
2743:
2744: echo_url=resource[1].absolute_url()
2745: if resource[1].getFullTextXML(noredirect="yes"):
2746: if hasattr(resource[1],'link'):
2747: viewer_url=echo_url+"/getFullTextXML"
2748: else:
2749: viewer_url="NO URL"
2750: if filter:
2751: if re.search(filter,viewer_url):
2752: ret+="""\n<resource echoLink="%s" viewerLink="%s"/>"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(viewer_url,safe='/:?'))
2753: else:
2754: ret+="""\n<resource echoLink="%s" viewerLink="%s"/>"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(viewer_url,safe='/:?'))
2755: ret +="""\n</index>"""
1.90 dwinter 2756:
1.81 dwinter 2757:
1.83 dwinter 2758: self.REQUEST.RESPONSE.setHeader("Content-Type", "text/xml")
2759: self.REQUEST.RESPONSE.write(ret)
1.108 dwinter 2760:
2761:
1.109 dwinter 2762: def getMetaDatasXML(self,viewerType=None,filter=None):
1.108 dwinter 2763: """gebe all ressourcen aus"""
2764: ret="""<?xml version="1.0" ?>
2765: <index>"""
2766: for resource in self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1):
2767:
2768: echo_url=resource[1].absolute_url()
2769: if resource[1].getFullTextXML(noredirect="yes"):
2770: if hasattr(resource[1],'link'):
2771: viewer_url=echo_url+"/getMetaDataXML"
2772: else:
2773: viewer_url="NO URL"
2774: if filter:
2775: if re.search(filter,viewer_url):
2776: ret+="""\n<resource echoLink="%s" viewerLink="%s"/>"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(viewer_url,safe='/:?'))
2777: else:
2778: ret+="""\n<resource echoLink="%s" viewerLink="%s"/>"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(viewer_url,safe='/:?'))
2779: ret +="""\n</index>"""
2780:
2781:
2782: self.REQUEST.RESPONSE.setHeader("Content-Type", "text/xml")
2783: self.REQUEST.RESPONSE.write(ret)
2784:
1.106 jdamerow 2785:
2786: def findPartners(self):
2787: """find all partners in partners"""
1.107 jdamerow 2788: par=self.ZopeFind(self.partners, obj_metatypes='ECHO_partner')
1.106 jdamerow 2789: return par
1.114 jdamerow 2790:
2791: def getPartnerFromID(self):
2792: """find partner form ID return object"""
1.115 jdamerow 2793: pa=self.REQUEST['partner']
1.116 jdamerow 2794: par=self.ZopeFind(self.partners, obj_ids=[pa])
1.114 jdamerow 2795: return par
1.117 jdamerow 2796:
2797: def getPartnerFromIDParameter(self, id):
2798: """ find partners from ID"""
2799: par=self.ZopeFind(self.partners, obj_ids=[id])
2800: return par
2801:
1.108 dwinter 2802:
1.1 casties 2803:
1.13 dwinter 2804: def manage_addECHO_root(self,id,title,RESPONSE=None):
1.1 casties 2805: """Add an ECHO_root"""
2806: self._setObject(id,ECHO_root(id,title))
2807:
2808: if RESPONSE is not None:
2809: RESPONSE.redirect('manage_main')
2810:
1.13 dwinter 2811: def manage_addECHO_rootForm(self):
1.1 casties 2812: """Nothing yet"""
1.13 dwinter 2813: pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_root.zpt').__of__(self)
1.1 casties 2814: return pt()
1.93 dwinter 2815:
2816: class ECHO_copyrightType(Folder):
2817: """copyright typ"""
2818:
2819: meta_type="ECHO_copyrightType"
2820:
1.119 jdamerow 2821: def __init__(self,id,title,label,url):
1.93 dwinter 2822: """init"""
2823: self.id=id
2824: self.title=title
2825: self.label=label
1.119 jdamerow 2826: self.url=url
1.93 dwinter 2827:
2828: manage_options = Folder.manage_options+(
2829: {'label':'Main Config','action':'ECHO_copyrightType_config_mainForm'},
2830: )
2831:
2832: def ECHO_copyrightType_config_mainForm(self):
2833: """change form"""
2834: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_copyrightType').__of__(self)
2835: pt.content_type="text/html"
2836: return pt()
2837:
1.119 jdamerow 2838: def ECHO_copyrightType_config_main(self,title,label,url,RESPONSE=None):
1.93 dwinter 2839: """change"""
2840: self.title=title
2841: self.label=label
1.119 jdamerow 2842: self.url=url
1.93 dwinter 2843:
2844: if RESPONSE is not None:
2845: RESPONSE.redirect('manage_main')
2846:
2847: def manage_addECHO_copyrightTypeForm(self):
2848: """Form for adding a ressource"""
2849: pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_copyrightTypeForm.zpt').__of__(self)
2850: return pt()
2851:
2852:
1.119 jdamerow 2853: def manage_addECHO_copyrightType(self,id,title,label,url,RESPONSE=None):
1.93 dwinter 2854: """addaresource"""
2855:
1.119 jdamerow 2856: newObj=ECHO_copyrightType(id,title,label,url)
1.93 dwinter 2857:
2858: self._setObject(id,newObj)
2859:
2860: if RESPONSE is not None:
2861: RESPONSE.redirect('manage_main')
2862:
2863:
1.1 casties 2864:
2865: class ECHO_partner(Image,Persistent):
2866: """ECHO Partner"""
2867:
2868: meta_type="ECHO_partner"
2869:
1.131 jdamerow 2870: def __init__(self, id, title,url, file, copyrightType, person, email, country, color, content_type='', precondition=''):
1.1 casties 2871: self.__name__=id
2872: self.title=title
2873: self.url=url
1.99 jdamerow 2874: self.person=person
2875: self.email=email
2876: self.country=country
1.131 jdamerow 2877: self.color=color
1.1 casties 2878: self.precondition=precondition
1.101 jdamerow 2879: self.copyrightType=copyrightType
1.1 casties 2880: data, size = self._read_data(file)
1.29 dwinter 2881: content_type=self._get_content_type(file, data, id, content_type)
2882: self.update_data(data, content_type, size)
1.1 casties 2883:
2884: manage_options = Image.manage_options+(
2885: {'label':'Partner Information','action':'ECHO_partner_config'},
2886: )
2887:
1.98 dwinter 2888:
1.131 jdamerow 2889: def changeECHO_partner(self,url,copyrightType,person, email, country, color, RESPONSE=None):
1.1 casties 2890: """Change main information"""
2891: self.url=url
1.99 jdamerow 2892: self.person=person
2893: self.email=email
2894: self.country=country
1.131 jdamerow 2895: self.color=color
1.100 jdamerow 2896: self.copyrightType=copyrightType
1.1 casties 2897: if RESPONSE is not None:
2898: RESPONSE.redirect('manage_main')
2899:
2900:
2901:
2902: def ECHO_partner_config(self):
2903: """Main configuration"""
2904: if not hasattr(self,'url'):
2905: self.url=""
1.13 dwinter 2906: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_partner.zpt').__of__(self)
1.1 casties 2907: return pt()
2908:
2909:
1.13 dwinter 2910: manage_addECHO_partnerForm=DTMLFile('dtml/ECHO_partnerAdd',globals(),
1.1 casties 2911: Kind='ECHO_partner',kind='ECHO_partner')
2912:
2913:
2914:
1.131 jdamerow 2915: def manage_addECHO_partner(self, id, url, person, email, country, color, file=None, copyrightType='', title='', precondition='', content_type='',
1.1 casties 2916: REQUEST=None):
2917: """
2918: Add a new ECHO_partner object.
2919:
2920: Creates a new ECHO_partner object 'id' with the contents of 'file'.
2921: Based on Image.manage_addImage
2922: """
2923:
2924: id=str(id)
2925: title=str(title)
1.29 dwinter 2926: content_type=str(content_type)
1.1 casties 2927: precondition=str(precondition)
2928:
2929: id, title = OFS.Image.cookId(id, title, file)
2930:
2931: self=self.this()
2932:
2933: # First, we create the image without data:
1.131 jdamerow 2934: self._setObject(id, ECHO_partner(id,title,url,'',copyrightType, person, email, country, color, content_type, precondition))
1.1 casties 2935:
2936: # Now we "upload" the data. By doing this in two steps, we
2937: # can use a database trick to make the upload more efficient.
2938: if file:
2939: self._getOb(id).manage_upload(file)
1.29 dwinter 2940: if content_type:
2941: self._getOb(id).content_type=content_type
1.1 casties 2942:
2943: if REQUEST is not None:
2944: try: url=self.DestinationURL()
2945: except: url=REQUEST['URL1']
2946: REQUEST.RESPONSE.redirect('%s/manage_main' % url)
2947: return id
2948:
2949:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>