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