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