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