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