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